package tezos-protocol-012-Psithaca
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=7062cd57addd452852598a2214ade393130efa087b99068d53713bdf912b3680
sha512=08e4091144a03ce3c107fb91a66501bd8b65ca3278917c455a2eaac6df3e108ade63f6ab8340a4bb152d60f404326e464d0ec95d26cafe8e82f870465d24a5fc
doc/tezos-protocol-012-Psithaca.raw/Tezos_raw_protocol_012_Psithaca/Token/index.html
Module Tezos_raw_protocol_012_Psithaca.TokenSource
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 = [ | `Contract of Contract_repr.t| `Collected_commitments of Blinded_public_key_hash.t| `Delegate_balance of Tezos_protocol_environment_012_Psithaca.Signature.Public_key_hash.t| `Frozen_deposits of Tezos_protocol_environment_012_Psithaca.Signature.Public_key_hash.t| `Block_fees| `Legacy_deposits of Tezos_protocol_environment_012_Psithaca.Signature.Public_key_hash.t * Cycle_repr.t| `Legacy_fees of Tezos_protocol_environment_012_Psithaca.Signature.Public_key_hash.t * Cycle_repr.t| `Legacy_rewards of Tezos_protocol_environment_012_Psithaca.Signature.Public_key_hash.t * 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 = [ | `Invoice| `Bootstrap| `Initial_commitments| `Revelation_rewards| `Double_signing_evidence_rewards| `Endorsing_rewards| `Baking_rewards| `Baking_bonuses| `Minted| `Liquidity_baking_subsidies| container
]source is the type of token providers. Token providers that are not containers are considered to have infinite capacity.
type sink = [ | `Storage_fees| `Double_signing_punishments| `Lost_endorsing_rewards of Tezos_protocol_environment_012_Psithaca.Signature.Public_key_hash.t * bool * bool| `Burned| 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_012_Psithaca.Error_monad.tzresult
Tezos_protocol_environment_012_Psithaca.Lwt.tallocated 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_012_Psithaca.Error_monad.tzresult
Tezos_protocol_environment_012_Psithaca.Lwt.tbalance 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_012_Psithaca.Error_monad.tzresult
Tezos_protocol_environment_012_Psithaca.Lwt.ttransfer_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_012_Psithaca.Error_monad.tzresult
Tezos_protocol_environment_012_Psithaca.Lwt.ttransfer ?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.