package tezos-protocol-alpha

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

The aim of this module is to manage operations involving tokens such as minting, transferring, and burning. Every constructor of the types source, container, or sink represents a kind of account that holds a given (or possibly infinite) amount of tokens.

Tokens can be transferred from a source to a sink. To uniformly handle all cases, special constructors of sources and sinks may be used. For example, the source `Minted is used to express a transfer of minted tokens to a destination, and the sink `Burned is used to express the action of burning a given amount of tokens taken from a source. Thanks to uniformity, it is easier to track transfers of tokens throughout the protocol by running grep -R "Token.transfer" src/proto_alpha.

type container = [
  1. | `Contract of Contract_repr.t
  2. | `Collected_commitments of Blinded_public_key_hash.t
  3. | `Delegate_balance of Tezos_crypto.Signature.public_key_hash
  4. | `Frozen_deposits of Tezos_crypto.Signature.public_key_hash
  5. | `Block_fees
  6. | `Legacy_deposits of Tezos_crypto.Signature.public_key_hash * Cycle_repr.t
  7. | `Legacy_fees of Tezos_crypto.Signature.public_key_hash * Cycle_repr.t
  8. | `Legacy_rewards of Tezos_crypto.Signature.public_key_hash * Cycle_repr.t
]

container is the type of token holders with finite capacity, and whose assets are contained in the context. Let d be a delegate. Be aware that transferring to/from `Delegate_balance d will not update d's stake, while transferring to/from `Contract (Contract_repr.implicit_contract d) will update d's stake.

type source = [
  1. | `Invoice
  2. | `Bootstrap
  3. | `Initial_commitments
  4. | `Revelation_rewards
  5. | `Double_signing_evidence_rewards
  6. | `Endorsing_rewards
  7. | `Baking_rewards
  8. | `Baking_bonuses
  9. | `Minted
  10. | `Liquidity_baking_subsidies
  11. | container
]

source is the type of token providers. Token providers that are not containers are considered to have infinite capacity.

type sink = [
  1. | `Storage_fees
  2. | `Double_signing_punishments
  3. | `Lost_endorsing_rewards of Tezos_crypto.Signature.public_key_hash * bool * bool
  4. | `Burned
  5. | container
]

sink is the type of token receivers. Token receivers that are not containers are considered to have infinite capacity.

val allocated : Raw_context.t -> container -> (bool, Tezos_protocol_environment_alpha__Environment.Error_monad.error Tezos_protocol_environment_alpha__Environment.Error_monad.trace) result Lwt.t

allocated ctxt container returns true if balance ctxt container is guaranteed not to fail, and returns false when balance ctxt container may fail.

val balance : Raw_context.t -> container -> (Tez_repr.t, Tezos_protocol_environment_alpha__Environment.Error_monad.error Tezos_protocol_environment_alpha__Environment.Error_monad.trace) result Lwt.t

balance ctxt container returns the balance associated to the token holder, may fail if allocated ctxt container returns false. Returns an error with the message "get_balance" if container refers to an originated contract that is not allocated. Returns a Storage_ErrorMissing_key error if container is of the form `Delegate_balance pkh, where pkh refers to an implicit contract that is not allocated.

val transfer_n : ?origin:Receipt_repr.update_origin -> Raw_context.t -> ([< source ] * Tez_repr.t) list -> [< sink ] -> (Raw_context.t * Receipt_repr.balance_updates, Tezos_protocol_environment_alpha__Environment.Error_monad.error Tezos_protocol_environment_alpha__Environment.Error_monad.trace) result Lwt.t

transfer_n ?origin ctxt sources dest transfers amount Tez from src to dest for each (src, amount) pair in sources, and returns a new context, and the list of corresponding balance updates. The function behaves as though transfer src dest amount was invoked for each pair (src, amount) in sources, however a single balance update is generated for the total amount transferred to dest. When sources is an empty list, the function does nothing to the context, and returns an empty list of balance updates.

val transfer : ?origin:Receipt_repr.update_origin -> Raw_context.t -> [< source ] -> [< sink ] -> Tez_repr.t -> (Raw_context.t * Receipt_repr.balance_updates, Tezos_protocol_environment_alpha__Environment.Error_monad.error Tezos_protocol_environment_alpha__Environment.Error_monad.trace) result Lwt.t

transfer ?origin ctxt src dest amount transfers amount Tez from source src to destination dest, and returns a new context, and the list of corresponding balance updates tagged with origin. By default, ~origin is set to Receipt_repr.Block_application. Returns Storage_ErrorMissing_key if src refers to a contract that is not allocated. Returns a Balance_too_low error if src refers to a contract whose balance is less than amount. Returns a Subtraction_underflow error if src refers to a source that is not a contract and whose balance is less than amount. Returns a Empty_implicit_delegated_contract error if src is an implicit contract that delegates to a different contract, and whose balance is equal to amount. Returns a Non_existing_contract error if dest refers to an originated contract that is not allocated. Returns a Non_existing_contract error if amount <> Tez_repr.zero, and dest refers to an originated contract that is not allocated. Returns a Addition_overflow error if dest refers to a sink whose balance is greater than Int64.max - amount. Returns a Wrong_level error if src or dest refer to a level that is not the current level.