Normally in Universa methodology, a smart contract may be any general purpose document. But, if, among all the permissions, it has the properly defined SplitJoinPermission – it effectively becomes a “fungible asset”, and can be called a token.

Any token contract will have the following features (according to the definition of the SplitJoinPermission):

  • It has some numeric value, which can vary in a specified range (and with a specified minimal unit).
  • It can be split to multiple (otherwise compatible and alike) contracts, changing the owners of some contracts in process if needed; the total value of these contracts will be the same as of the original contract.
  • Multiple contracts (most likely, created previously by the split operations of the compatible contracts) can be joined into a single contract, if they are owned by the same owner; the total value of these joined contracts will be the same as of the result contract.

The split (1:M) and join (N:1) operations can actually perform simultaneously, joining multiple contracts (if owned by the same entity) and splitting them to new owners (N:M); the only requirements are similar: the contracts should have the compatible SplitJoin definition, and the total value “before” should be equal to the total value “after”.

The SplitJoinPermission defined in the contract, may be configured differently, making some token contracts split-joinable with some other compatible token contracts, but not with some other incompatible ones (e.g., “UTN tokens can be accumulated with other UTN tokens; GOLD tokens can be accumulated with other GOLD tokens; but UTN and GOLD tokens are incompatible with each other”). In layman terms, these compatible contracts comprise the contracts of some specific token.

The Universa clients which have the special-purpose features of working with tokens, are often called as having the wallet features.