Introduction

The following actions break down the construction of a Tokenized protocol message. The action is constructed by building a single string from each of the elements in order. Each field within the action is given a specific type, including standard types and compound types.

See the Transactions article for details on how to construct a complete transaction.

Header Fields

Every protocol action is prepended with a header that specifies the necessary details about the subsequent action contents.

Field Type Description
Version uint(1) The version number that determines the structure of the action payload and field definitions.
ActionCode fixedchar(2) The Action Code that determines the expected contents of the action payload. Example: C1

Available Actions

Asset Definition

This action is used by the administration to define the properties/characteristics of the asset (token) that it wants to create. An asset has a unique identifier called AssetID = AssetType + base58(AssetCode + checksum). An asset is always linked to a contract that is identified by the public address of the Contract wallet.

Action Code A1
Field Type Description
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: COU
AssetAuthFlags varbin(8) A set of switches that define the authorization rules for this asset. See the Authorization Flags documentation for more detail.
TransfersPermitted bool Set to true if transfers are permitted between two parties, otherwise set to false to prevent peer-to-peer transfers. Example: 1
TradeRestrictions Polity[16] If specified, the asset can only be traded within the specified trade restriction zone. For example, AUS would restrict to Australian residents only. Example: GBR
EnforcementOrdersPermitted bool Set to true if the administration is permitted to make enforcement orders on user tokens and balances, otherwise set to false to disable this feature. Example: 1
VotingRights bool When false holders of this asset will not be able to vote for tokens of this asset even on voting systems in which vote multiplers are not permitted.
VoteMultiplier uint(1) Multiplies a vote by the specified integer. Where 1 token is equal to 1 vote with a 1 for vote multipler (normal), 1 token = 3 votes with a multiplier of 3, for example. If zero, then holders of this asset don't get any votes for their tokens. Example: 3
AdministrationProposal bool Set to true if the administration is permitted to make proposals outside of the smart contract scope. General Governance Example: true
HolderProposal bool Set to true if a holder is permitted to make proposals outside of the smart contract scope. Example: true
AssetModificationGovernance uint(1) Supported values: 1 - Contract-wide Asset Governance. 0 - Asset-wide Asset Governance. If a referendum or initiative is used to propose a modification to a subfield controlled by the asset auth flags, then the vote will either be a contract-wide vote (all assets vote on the referendum/initiative) or an asset-wide vote (only this asset votes on the referendum/initiative) depending on the value in this subfield. The voting system specifies the voting rules. Example: 1
TokenQty uint(8) The number of tokens to issue with this asset. Set to greater than zero for fungible tokens. If the value is 1 then it becomes a non-fungible token, where the contract would have many assets. Set to 0 to represent a placeholder asset, where tokens are to be issued later, or to represent a decomissioned asset where all tokens have been revoked. Example: 1000000
AssetPayload varbin(16) A custom payload that contains meta data about this asset. Payload structure and length is dependent on the asset type chosen. See asset documentation for more details.
Transaction Summary
Index Input Description
0 Administration's Public Address This action can only come from the administration.
Index Output Description
0 Contract Public Address The contract that this asset should be assigned to. Must include enough for the responding action.

Asset Creation

This action creates an asset in response to the administration's instructions in the Definition Action.

Action Code A2
Field Type Description
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
AssetIndex uint(8) The index of the asset within the contract. First asset is zero, second is one. Used to derive the asset code.
AssetAuthFlags varbin(8) A set of switches that define the authorization rules for this asset. See the Authorization Flags documentation for more detail.
TransfersPermitted bool Set to true if transfers are permitted between two parties, otherwise set to false to prevent peer-to-peer transfers. Example: 1
TradeRestrictions Polity[16] If specified, the asset can only be traded within the specified trade restriction zone. For example, AUS would restrict to Australian residents only. Example: GBR
EnforcementOrdersPermitted bool Set to true if the administration is permitted to make enforcement orders on user tokens and balances, otherwise set to false to disable this feature. Example: 1
VotingRights bool When false holders of this asset will not be able to vote for tokens of this asset even on voting systems in which vote multiplers are not permitted.
VoteMultiplier uint(1) Multiplies a vote by the specified integer. Where 1 token is equal to 1 vote with a 1 for vote multipler (normal), 1 token = 3 votes with a multiplier of 3, for example. If zero, then holders of this asset don't get any votes for their tokens. Example: 3
AdministrationProposal bool Set to true if the administration is permitted to make proposals outside of the smart contract scope. General Governance Example: true
HolderProposal bool Set to true if a holder is permitted to make proposals outside of the smart contract scope. Example: true
AssetModificationGovernance uint(1) Supported values: 1 - Contract-wide Asset Governance. 0 - Asset-wide Asset Governance. If a referendum or initiative is used to propose a modification to a subfield controlled by the asset auth flags, then the vote will either be a contract-wide vote (all assets vote on the referendum/initiative) or an asset-wide vote (only this asset votes on the referendum/initiative) depending on the value in this subfield. The voting system specifies the voting rules. Example: 1
TokenQty uint(8) The number of tokens to issue with this asset. Set to greater than zero for fungible tokens. If the value is 1 then it becomes a non-fungible token, where the contract would have many assets. Set to 0 to represent a placeholder asset, where tokens are to be issued later, or to represent a decomissioned asset where all tokens have been revoked. Example: 1000000
AssetPayload varbin(16) A custom payload that contains meta data about this asset. Payload structure and length is dependent on the asset type chosen. See asset documentation for more details.
AssetRevision uint(4) A counter for the number of times this asset has been revised using a modification action.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration or operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that this asset was assigned to.
Index Output Description
0 Contract Public Address Required so that users can monitor transactions to the contract for updates to contract/assets.

Asset Modification

Token Dilutions, Call Backs/Revocations, burning etc.

Action Code A3
Field Type Description
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
AssetRevision uint(4) The current revision figure to ensure the modification provided is based on the latest version. Cannot be Amended Example: 0
Amendments Amendment[8] A collection of modifications to perform on this asset.
RefTxID TxId The Bitcoin transaction ID of the associated result action that permitted the modifications. See Governance for more details.
Transaction Summary
Index Input Description
0 Administration's Public Address This action can only come from the administration.
Index Output Description
0 Contract Public Address The contract that this asset currently belongs to. Must include enough for the responding action.

Contract Offer

Allows the administration to tell the smart contract what they want the details (labels, data, T&C's, etc.) of the Contract to be on-chain in a public and immutable way. The Contract Offer action 'initializes' a generic smart contract that has been spun up by either the smart contract operator or the administration. This on-chain action allows for the positive response from the smart contract with either a Contract Formation Action or a Rejection Action.

Action Code C1
Field Type Description
ContractName varchar(8) Can be any unique identifying string, including human readable names for branding/vanity purposes. Contract identifier (instance) is the bitcoin public key hash address. If the public address is lost, then the administration will have to reissue the entire contract, Asset Definition and tokens with the new public address. Smart contracts can be branded and specialized to suit any terms and conditions. Example: Tesla - Shareholder Agreement
BodyOfAgreementType uint(1) 1 - SHA-256 Hash, 2 - Tokenized Body of Agreement Format Body of Agreement - Amendments can be restricted to a vote. Example: 1
BodyOfAgreement varbin(32) SHA-256 hash of the body of the agreement (full contract in pdf format or the like) or the full terms and conditions of an agreement in the Tokenized Body of Agreement format. This is specific to the smart contract and relevant Assets. Legal and technical information.
ContractType varchar(8) Describes the purpose of the contract. Example: Shareholder Agreement
SupportingDocs Document[8] Supporting documents that are important to the contract.
GoverningLaw fixedchar(5) 5 Letter Code to identify which governing law the contract will adhere to. Disputes are to be settled by this law in the jurisdiction specified below. Private dispute resolution organizations can be used as well. A custom code just needs to be defined. Governing Law - Amendments can be restricted to a vote. Example: USA
Jurisdiction fixedchar(5) Legal proceedings/arbitration will take place using the specified Governing Law in this location. Jurisdiction - Amendments can be restricted to a vote. Example: US-CA
ContractExpiration Timestamp All actions related to the contract will cease to work after this timestamp. The smart contract will stop running. This will allow many token use cases to be able to calculate total smart contract running costs for the entire life of the contract. Eg. an issuer is creating tickets for an event on the 5th of June 2018. The smart contract will facilitate exchange and send transactions up until the 6th of June. Wallets can use this to forget tokens that are no longer valid - or at least store them in an 'Expired' folder. Contract Expiration - Amendments can be restricted to a vote. Example: Wed May 09 2018 00:00:00 GMT+1000 (AEST)
ContractURI varchar(8) Points to an information page that also has a copy of the Contract. Anyone can go to the website to have a look at the price/token, information about the issuer (company), information about the asset, legal information, etc. There will also be a way for token owners to vote on this page and contact details with the issuer/tokenized companies. Could be a IPv6/IPv4, or txn-id for on-chain information or even a public address (DNS). Example: https://tokenized.com/Contract/3qeoSCg7JmfSnJesJFojj
Issuer Entity The issuer of this contract.
IssuerLogoURL varchar(8) The URL of the issuer's logo. Example: https://example.com/images/logo.png
ContractOperatorIncluded bool If true, then the second input is a contract operator. If false, then all additional inputs are just funding and "includes" fields are skipped in serialization.
ContractOperator Entity An additional entity with operator access to the contract.
ContractAuthFlags varbin(16) A set of switches that define the authorization rules for this contract. See the Authorization Flags documentation for more detail. Other terms and conditions that are out of the smart contract's control should be listed in the Body of Agreement. Contract Flags - Amendments can be restricted to a vote. Specified in the Voting System.
ContractFee uint(8) Satoshis required to be paid to the contract for each asset action.
VotingSystems VotingSystem[8] A list of voting systems.
RestrictedQtyAssets uint(8) Number of Assets (non-fungible) permitted on this contract. 0 if unlimited which will display an infinity symbol in UI Qty of Assets - Amendments can be restricted to a vote. Example: 1
AdministrationProposal bool Set to true if the administration is permitted to make proposals outside of the smart contract scope. General Governance Example: true
HolderProposal bool Set to true if a holder is permitted to make proposals outside of the smart contract scope. Example: true
Oracles Oracle[8] A list of oracles that provide approval for all token transfers for all assets under the contract.
MasterPKH PublicKeyHash The public key hash of the contract's master key. This key has the ability to change the active contract address in case of a security failure with the active contract key.
Transaction Summary
Index Input Description
0 Administration's Public Address The smart contract sets the administration's public address with whatever public address is in Index 0 of the first valid Contract Offer. From then on, the SC will only respond to 'commands' (request actions) from this address with respect to actions that are controlled by the administration according to the protocol.
1 Contract Operator's Public Address (Optional) Can also be used as a cold storage backup for the issuer. This is important if the issuer wants to be able to change their address as changes to the issuer or operator pkh in an amendment require signatures from both the issuer and the operator pkhs. The one exception to this rule, the Contract Operator can nominate a secondary controlling public address that can act on behalf of the issuer for issuer related requests. Typically this will be the Smart Contract Operator.
Index Output Description
0 Contract Public Address A contract address that has no other contract associated to it already.

Contract Formation

This txn is created by the contract (smart contract/off-chain agent/token contract) upon receipt of a valid Contract Offer Action from the administration. The smart contract will execute on a server controlled by the administration, or a smart contract operator on their behalf.

Action Code C2
Field Type Description
ContractName varchar(8) Can be any unique identifying string, including human readable names for branding/vanity purposes. Contract identifier (instance) is the bitcoin public key hash address. If the public address is lost, then the administration will have to reissue the entire contract, asset definition and tokens with the new public address. Smart contracts can be branded and specialized to suit any terms and conditions. Example: Tesla - Shareholder Agreement
BodyOfAgreementType uint(1) 1 - SHA-256 Hash, 2 - Tokenized Body of Agreement Format Body of Agreement - Amendments can be restricted to a vote. Example: 1
BodyOfAgreement varbin(32) SHA-256 hash of the body of the agreement (full contract in pdf format or the like) or the full terms and conditions of an agreement in the Tokenized Body of Agreement format. This is specific to the smart contract and relevant Assets. Legal and technical information.
ContractType varchar(8) Describes the purpose of the contract. Example: Shareholder Agreement
SupportingDocs Document[8] Supporting documents that are important to the contract.
GoverningLaw fixedchar(5) 5 Letter Code to identify which governing law the contract will adhere to. Disputes are to be settled by this law in the jurisdiction specified below. Private dispute resolution organizations can be used as well. A custom code just needs to be defined. Governing Law - Amendments can be restricted to a vote. Example: USA
Jurisdiction fixedchar(5) Legal proceedings/arbitration will take place using the specified Governing Law in this location. Jurisdiction - Amendments can be restricted to a vote. Example: US-CA
ContractExpiration Timestamp All actions related to the contract will cease to work after this timestamp. The smart contract will stop running. This will allow many token use cases to be able to calculate smart contract running costs. Eg. an issuer is creating tickets for an event on the 5th of June 2018. The smart contract will facilitate exchange and send transactions up until the 6th of June. Wallets can use this to forget tokens that are no longer valid - or at least store them in an 'Expired' folder. Contract Expiration - Amendments can be restricted to a vote. Example: Wed May 09 2018 00:00:00 GMT+1000 (AEST)
ContractURI varchar(8) Length 0-255 bytes. 0 is valid. Points to an information page that also has a copy of the Contract. Anyone can go to the website to have a look at the price/token, information about the Issuer (company), information about the Asset, legal information, etc. There will also be a way for Token Owners to vote on this page and contact details with the Issuer/tokenized companies. Could be a IPv6/IPv4, an IPFS address (hash) or txn-id for on chain information or even a public address (DNS). Example: https://tokenized.com/Contract/3qeoSCg7JmfSnJesJFojj
Issuer Entity The issuer of this contract.
IssuerLogoURL varchar(8) The URL of the issuer's logo. Example: https://example.tld/images/logo.png
ContractOperatorIncluded bool If true, then the second input is a contract operator. If false, then all additional inputs are just funding and "includes" fields are skipped in serialization.
ContractOperator Entity An additional entity with operator access to the contract.
ContractAuthFlags varbin(16) A set of switches that define the authorization rules for this contract. See the Authorization Flags documentation for more detail. Other terms and conditions that are out of the smart contract's control should be listed in the Body of Agreement Contract Flags - Amendments can be restricted to a vote. Specified in the Voting System.
ContractFee uint(8) Satoshis required to be paid to the contract for each asset action.
VotingSystems VotingSystem[8] A list voting systems.
RestrictedQtyAssets uint(8) Number of Assets (non-fungible) permitted on this contract. 0 if unlimited which will display an infinity symbol in UI Qty of Assets - Amendments can be restricted to a vote. Example: 1
AdministrationProposal bool Set to true if the administration is permitted to make proposals outside of the smart contract scope. General Governance Example: true
HolderProposal bool Set to true if a holder is permitted to make proposals outside of the smart contract scope. Example: true
Oracles Oracle[8] A list of oracles that provide approval for all token transfers for all assets under the contract.
MasterPKH PublicKeyHash The public key hash of the contract's master key. This key has the ability to change the active contract address in case of a security failure with the active contract key.
ContractRevision uint(4) A counter for the number of times this contract has been revised using an amendment action. Can't be changed by the administration or smart contract operator. Example: 0
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The related contract address.
Index Output Description
0 Contract Public Address Required so that users can monitor transactions to the contract for updates to contract/assets.

Contract Amendment

The administration can initiate an amendment to the contract establishment metadata. The ability to make an amendment to the contract is restricted by the Authorization Flag set on the current revision of Contract Formation action.

Action Code C3
Field Type Description
ChangeAdministrationAddress bool Used to change the administration address. The new administration address must be in the input[1] position. A change of the administration or operator address requires both the operator and the administration address to be in the inputs (both signatures) of the Contract Amendment action. Example: 1
ChangeOperatorAddress bool Used to change the smart contract operator address. The new operator address must be in the input[1] position, unless the administration is being changed too, then it is in input[2]. A change of the administration or operator address requires both the operator and the administration address to be in the inputs (both signatures) of the Contract Amendment action. Example: 1
ContractRevision uint(4) Counter 0 to (2^32)-1 Example: 42
Amendments Amendment[8] A collection of modifications to perform on this contract.
RefTxID TxId The Bitcoin transaction ID of the associated result action that permitted the modifications. See Governance for more details.
Transaction Summary
Index Input Description
0 Administration's Public Address This action can only come from the administration.
1 New Administration Public Address Only treated as the new administration address when the Change Administration Address flag is set to true.
Index Output Description
0 Contract Public Address The related contract address.

Static Contract Formation

Static Contract Formation Action

Action Code C4
Field Type Description
ContractName varchar(8) Can be any unique identifying string, including human readable names for branding/vanity purposes. Contract identifier (instance) is the bitcoin public address. If the public address is lost, then the administration will have to reissue the entire contract, Asset Definition and tokens with the new public address. Smart contracts can be branded and specialized to suit any terms and conditions. Example: Tesla - Shareholder Agreement
ContractCode ContractCode 32 randomly generated bytes. Each Contract Code should be unique. The Contract ID will be human facing and will be the Contract Code, with a checksum, encoded in base58 and prefixed by 'CON'. Contract ID = CON + base58(ContractCode + checksum). Eg. Contract ID = 'CON18RDoKK7Ed5zid2FkKVy7q3rULr4tgfjr4'
BodyOfAgreementType uint(1) 1 - SHA-256 Hash, 2 - Tokenized Body of Agreement Format Body of Agreement - Amendments can be restricted to a vote. Example: 1
BodyOfAgreement varbin(32) SHA-256 hash of the body of the agreement (full contract in pdf format or the like) or the full terms and conditions of an agreement in the Tokenized Body of Agreement format. This is specific to the smart contract and relevant Assets. Legal and technical information.
ContractType varchar(8) Describes the purpose of the contract. Example: Non-Disclosure Agreement
SupportingDocs Document[8] Supporting documents that are important to the contract.
ContractRevision uint(4) Counter 0 to (2^32)-1 Example: 0
GoverningLaw fixedchar(5) 5 Letter Code to identify which governing law the contract will adhere to. Disputes are to be settled by this law in the jurisdiction specified below. Private dispute resolution organizations can be used as well. A custom code just needs to be defined. Example: USA
Jurisdiction fixedchar(5) Legal proceedings/arbitration will take place using the specified Governing Law in this location. Example: US-CA
EffectiveDate Timestamp Start date of the contract.
ContractExpiration Timestamp All actions related to the contract will cease to work after this timestamp. The smart contract will stop running. This will allow many token use cases to be able to calculate smart contract running costs. Eg. an issuer is creating tickets for an event on the 5th of June 2018. The smart contract will facilitate exchange and send transactions up until the 6th of June. Wallets can use this to forget tokens that are no longer valid - or at least store them in an 'Expired' folder.
ContractURI varchar(8) Length 0-255 bytes. Points to an information page that also has a copy of the Contract. Anyone can go to the website to have a look at the price/token, information about the issuer (company), information about the Asset, legal information, etc. There will also be a way for token owners to vote on this page and contact details with the issuer/tokenized companies. Could be a IPv6/IPv4, or txn-id for on chain information or even a public address (DNS). Example: https://tokenized.com/Contract/3qeoSCg7JmfSnJesJFojj
PrevRevTxID TxId The Tx-ID of the previous contract revision.
Entities Entity[8] A list of legal entities associated with this contract.
Transaction Summary
Index Input Description
0 Issuer or Party X Public Address Any number of involved parties with this contract.

Contract Address Change

This txn is signed by the master contract key defined in the contract formation and changes the active contract address which the contract uses to receive and respond to requests. This is a worst case scenario fallback to only be used when the contract private key is believed to be exposed.

Action Code C5
Field Type Description
NewContractPKH PublicKeyHash The address to be used by all future requests/responses for the contract.
Timestamp Timestamp Timestamp in nanoseconds of when the action was created.
Transaction Summary
Index Input Description
0 Contract Master Public Address The contract master address.
Index Output Description
0 Contract Public Address Currently active, and soon to be deactivated, contract address.
1 New Contract Public Address The address the contract will use from this point forward.

Order

Used by the administration to signal to the smart contract that the tokens that a particular public address(es) owns are to be confiscated, frozen, thawed or reconciled.

Action Code E1
Field Type Description
ComplianceAction fixedchar(1) Freeze (F), Thaw (T), Confiscate (C), Reconcile (R) Example: F
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
TargetAddresses TargetAddress[16] The holders and quantities that are effected by the order. For a contract or asset wide freeze only the contract address is specified. Zero quantities are invalid unless it is for the contract address in an asset wide or contract wide freeze. In a thaw order this field is not serialized, because the entire freeze from the FreezeTxId freeze action will be thawed.
FreezeTxId TxId The tx id of the freeze action that is being thawed. Only serialized for thaw orders.
FreezePeriod Timestamp Used for a 'time out'. Tokens are automatically unfrozen after the expiration timestamp without requiring a Thaw Action. Null value for Thaw, Confiscation and Reconciallitaion orders. Example: Tue Oct 09 2018 05:00:00 GMT+1000 (AEST)
DepositAddress PublicKeyHash The public address for confiscated tokens to be deposited in. Null for Freeze, Thaw, actions. Eventually the supporting evidence/explanation can be supported by a Subfield that has the public address (and a signed message) owned by a legal authority for ID verification/certification purposes.
AuthorityIncluded bool Specifies if an authority signature is included. For Reconcialitaion actions all authority signature related fields are skipped during serialization.
AuthorityName varchar(8) Length 0-255 bytes. Enforcement Authority Name (eg. Issuer, Queensland Police Service, Tokenized, etc.) Example: Supreme and District Courts Brisbane
AuthorityPublicKey varbin(8) Length 0-255 bytes. Public Key associated with the Enforcement Authority
SignatureAlgorithm uint(1) Algorithm used for order signature. Only valid value is currently 1 = ECDSA+secp256k1 Example: 1
OrderSignature varbin(8) Length 0-255 bytes. Signature for a message that lists out the target addresses and deposit address. Signature of (Contract PKH, Compliance Action, Authority Name, Asset Code, Supporting Evidence Hash, FreezePeriod, TargetAddresses, and DepositAddress)
SupportingEvidenceHash bin(32) SHA-256: warrant, court order, etc.
RefTxs varbin(32) The request/response actions that were dropped. The entire txn for both actions is included as evidence that the actions were accepted into the mempool at one point and that the senders (token/Bitcoin) signed their intent to transfer. The management of this record keeping is off-chain and managed by the administration or operator to preserve the integrity of the state of the tokens. Only applicable for reconcilliation actions. No subfield when F, T, R is selected as the Compliance Action subfield. Can be null. Dropped actions that require a reconciliation action to fix the break in the chain are considered to be an extremely rare event.
BitcoinDispersions QuantityIndex[16] Index of address in TargetAddresses and amount of bitcoin (in satoshis) they are receiving in exchange for their tokens.
Message varchar(32) A message to include with the enforcement order. Example: Compelled by a court order.
Transaction Summary
Index Input Description
0 Administration's Public Address This action can only come from the administration.
Index Output Description
0 Contract Public Address Contract fee and funding for response transaction.

Freeze

The contract responding to an Order action to freeze assets. To be used to comply with contractual/legal/issuer requirements. The target public address(es) will be marked as frozen. However the Freeze action publishes this fact to the public blockchain for transparency. The contract will not respond to any actions requested by the frozen address.

Action Code E2
Field Type Description
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
Quantities QuantityIndex[16] Indices to addresses in outputs and the quantities being frozen. If the only address is the contract address and the asset code is zeros, then it is a contract wide freeze. If the only address is the contract address and the asset code is specified, then it is an asset wide freeze.
FreezePeriod Timestamp Used for a 'time out'. Tokens are automatically unfrozen after the expiration timestamp without requiring a Thaw Action.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Target Public Address X If Target Public Address is the Contract Address then the entire contract is frozen. All request actions during the Freeze period will be ignored and rejected when the contract is thawed and rebuilds.

Thaw

The contract responding to an Order action to thaw assets. To be used to comply with contractual obligations or legal requirements. The Alleged Offender's tokens will be unfrozen to allow them to resume normal exchange and governance activities.

Action Code E3
Field Type Description
FreezeTxId TxId The tx id of the freeze action that is being reversed.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Target Public Address X Can be the Contract Address for a 'Contract-wide' Thaw in response to a Contract-wide Freeze.

Confiscation

The contract responding to an Order action to confiscate assets. To be used to comply with contractual obligations, legal and/or issuer requirements.

Action Code E4
Field Type Description
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
Quantities QuantityIndex[16] The holders effected by the confiscation and their balance remaining.
DepositQty uint(8) Deposit address's token balance after confiscation. Example: 10000
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Target Public Address X Can be the Contract Address for a 'Contract-wide' Confiscation.
1 Deposit Public Address Dust limit rule minimum value output of 546

Reconciliation

The contract responding to an Order action to reconcile assets. To be used at the direction of the administration to fix record keeping errors with bitcoin and token balances.

Action Code E5
Field Type Description
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
Quantities QuantityIndex[16] The holders effected by the reconciliation and their balance remaining.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Target Public Address X 546 minimum. If N bitcoin needs to be sent to the address, then this will be the output that receives the Bitcoin.

Proposal

Allows the Administration/Token Holders to propose a change (aka Initiative/Shareholder vote). A significant cost - specified in the Contract Formation - can be attached to this action when sent from Token Holders to reduce spam, as the resulting vote will be put to all token owners.

Action Code G1
Field Type Description
Initiator uint(1) Who initiated the proposal. Supported values: 0 - Administration, 1 - Holder
AssetSpecificVote bool When true this proposal is specific to an asset and the asset type and asset code fields are serialized.
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
VoteSystem uint(1) X for Vote System X. (1-255, 0 is not valid.) Example: 1
Specific bool When true the ProposedAmendments field is included and specifies the exact changes to make to the contract/asset on chain. When false this is just a general proposal like a strategy/direction and doesn't result in any on chain update.
ProposedAmendments Amendment[8] Each element contains details of which fields to modify, or delete. Because the number of fields in a Contract and Asset is dynamic due to some fields being able to be repeated, the index value of the field needs to be calculated against the Contract or Asset the changes are to apply to. In the event of a Vote being created from this Initiative, the changes will be applied to the version of the Contract or Asset at that time.
VoteOptions varchar(8) Length 1-255 bytes. 0 is not valid. Each byte allows for a different vote option. Typical votes will likely be multiple choice or Y/N. Vote instances are identified by the Tx-ID. AB would be used for Y/N (binary) type votes. When Specific is true, only AB is a valid value. Example: ABCDEFGHIJKLMNO
VoteMax uint(1) Range: 1-X. How many selections can a voter make in a Ballot Cast. 1 is selected for Y/N (binary). When Specific is true, only 1 is a valid value. Example: 15
ProposalDescription varchar(32) Length restricted by the Bitcoin protocol. 0 is valid. Description or details of the vote Example: Change the name of the Contract.
ProposalDocumentHash bin(32) SHA256 Hash of the proposal document to be distributed to voters. Example: 77201b0094f50df309f0343e4f44dae64d0de503c91038faf2c6b039f9f18aec
VoteCutOffTimestamp Timestamp Ballot casts after this timestamp will not be included. The vote has finished.
Transaction Summary
Index Input Description
0 Operator / Token Owner's Public Address The user making the proposal for this contract.
Index Output Description
0 Contract Public Address Includes contract fee and holder proposal fee if applicable.
1 Contract Public Address Fund the Result TX at Vote cut off

Vote

A vote is created by the Contract in response to a valid Proposal Action.

Action Code G2
Field Type Description
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Contract Public Address Required so that users can monitor transactions to the contract for notifications of this action.

Ballot Cast

Used by Token Owners to cast their ballot (vote) on proposals. 1 Vote per token unless a vote multiplier is specified in the relevant Asset Definition action.

Action Code G3
Field Type Description
VoteTxId TxId Tx ID of the Vote the Ballot Cast is being made for.
Vote varchar(8) Length 1-255 bytes. 0 is not valid. Max length is the VoteMax value from the Proposal action. Accept, Reject, Abstain, Spoiled, Multiple Choice, or Preference List. 15 options total. Order of preference. 1st position = 1st choice. 2nd position = 2nd choice, etc. A is always Accept and B is always reject in a Y/N votes. Example: A
Transaction Summary
Index Input Description
0 Token Owner's Public Address The user casting the ballot for this contract.
Index Output Description
0 Contract Public Address Funds ballot cast response.

Ballot Counted

The smart contract will respond to a Ballot Cast action with a Ballot Counted action if the Ballot Cast is valid. If the Ballot Cast is not valid, then the smart contract will respond with a Rejection Action.

Action Code G4
Field Type Description
VoteTxId TxId Tx ID of the Vote the Ballot Cast is being made for.
Vote varchar(8) Length 1-255 bytes. 0 is not valid. Max length is the VoteMax value from the Proposal action. Accept, Reject, Abstain, Spoiled, Multiple Choice, or Preference List. 15 options total. Order of preference. 1st position = 1st choice. 2nd position = 2nd choice, etc. A is always Accept and B is always reject in a Y/N votes. Example: A
Quantity uint(8) Number of votes counted for this ballot. Factors in vote multipliers if there are any allowed, otherwise it is just quantity of tokens held.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Contract Public Address Required so that users can monitor transactions to the contract for notifications of this action.

Result

Once a vote has been completed the results are published. After the result is posted, it is up to the administration to send a contract/asset amendement if appropriate.

Action Code G5
Field Type Description
AssetSpecificVote bool When true this proposal is specific to an asset and the asset type and asset code fields are serialized.
AssetType fixedchar(3) Three letter character that specifies the asset type. Example: SHC
AssetCode AssetCode A unique code that is used to identify the asset. It is generated by hashing the contract public key hash and the asset index. SHA256(contract PKH + asset index) Cannot be changed by the administration, operator or smart contract.
Specific bool When true the ProposedAmendments field is included and specifies the exact changes to make to the Contract/Asset on chain. When false this is just a general proposal like a strategy/direction and doesn't result in any on chain update.
ProposedAmendments Amendment[8] Each element contains details of which fields to modify, or delete. Because the number of fields in a Contract and Asset is dynamic due to some fields being able to be repeated, the index value of the field needs to be calculated against the Contract or Asset the changes are to apply to. In the event of a Vote being created from this Initiative, the changes will be applied to the version of the Contract or Asset at that time.
VoteTxId TxId Link to the Vote Action txn.
OptionTally uint64[8] List of number of valid votes counted for each vote option. Length is encoded like a regular list object, but must match the length of VoteOptions from the Proposal action.
Result varchar(8) Length 1-255 bytes. 0 is not valid. The Option with the most votes. In the event of a draw for 1st place, all winning options are listed.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 Contract Public Address Required so that users can monitor transactions to the contract for notifications of this action.

Message

The message action is a general purpose communication action. 'Twitter/SMS' for Issuers/Investors/Users. The message txn can also be used for passing partially signed txns on-chain, establishing private communication channels and EDI (receipting, invoices, PO, and private offers/bids). The messages are broken down by type for easy filtering in the a user's wallet. The Message Types are listed in the Message Types table.

Action Code M1
Field Type Description
AddressIndexes uint16[8] Associates the message to a particular output by the index.
MessageType uint16 Potential for up to 65,535 different message types. Values from resources/Messages.yaml Example: 6000
MessagePayload varbin(32) Public or private (RSA public key, Diffie-Hellman). Issuers/Contracts can send the signifying amount of satoshis to themselves for public announcements or private 'notes' if encrypted. See Message Types for a full list of potential use cases. Example: Hello world!
Transaction Summary
Index Input Description
0 Sender Public Address The user sending the message.
Index Output Description
0 Receiver Public Address" The recipient's address for the message, supplied by the sender.

Rejection

Used to reject request actions that do not comply with the Contract. If money is to be returned to a User then it is used in lieu of the Settlement Action to properly account for token balances. All Administration/User request Actions must be responded to by the Contract with an Action. The only exception to this rule is when there is not enough fees in the first Action for the Contract response action to remain revenue neutral. If not enough fees are attached to pay for the Contract response then the Contract will not respond.

Action Code M2
Field Type Description
AddressIndexes uint16[8] Associates the message to a particular output by the index.
RejectAddressIndex uint(2) The address which is believed to have caused the rejection.
RejectionCode RejectionCode Classifies the rejection by a type. Example: 1
Message varchar(16) Length 0-65,535 bytes. Message that explains the reasoning for a rejection, if needed. Most rejection types will be captured by the Rejection Type Subfield. Example: Sorry, you don't have enough tokens.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address The contract that is performing this action.
Index Output Description
0 User / Contract public addresses The affected user or contract's publid addresses. Refunds all money provided in the request action, less fees

Establishment

Establishes an on-chain register.

Action Code R1
Field Type Description
Message varchar(32) A custom message to include with this action. Example: North America Whitelist
Transaction Summary
Index Input Description
0 Register Public Address The address of the associated register.
Index Output Description
0 Register Public Address Required so that users can monitor transactions to the register for notifications of this action.

Addition

Adds an entry to the Register.

Action Code R2
Field Type Description
Message varchar(32) A custom message to include with this action. Example: username
Transaction Summary
Index Input Description
0 Register Public Address The address of the associated register.
Index Output Description
0 Register Public Address Required so that users can monitor transactions to the register for notifications of this action.

Alteration

A register entry/record can be altered.

Action Code R3
Field Type Description
EntryTxID TxId Transaction ID of the register entry to be altered.
Message varchar(32) A custom message to include with this action. Example: Changed Country of Residence
Transaction Summary
Index Input Description
0 Register Public Address The address of the associated register.
Index Output Description
0 Register Public Address Required so that users can monitor transactions to the register for notifications of this action.

Removal

Removes an entry/record from the Register.

Action Code R4
Field Type Description
EntryTxID TxId Transaction ID of the register entry to be altered.
Message varchar(32) A custom message to include with this action. Example: Removed due to violation of company policy.
Transaction Summary
Index Input Description
0 Register Public Address The address of the associated register.
Index Output Description
0 Register Public Address Required so that users can monitor transactions to the register for notifications of this action.

Transfer

A Token Owner(s) Sends, Exchanges or Swaps a token(s) or Bitcoin for a token(s) or Bitcoin. Can be as simple as sending a single token to a receiver. Or can be as complex as many senders sending many different assets - controlled by many different smart contracts - to a number of receivers. This action also supports atomic swaps (tokens for tokens). Since many parties and contracts can be involved in a transfer and the corresponding settlement action, the partially signed T1 and T2 actions will need to be passed around on-chain with an M1 action, or off-chain.

Action Code T1
Field Type Description
Assets AssetTransfer[8] The Assets involved in the Transfer Action.
OfferExpiry Timestamp This prevents any party from holding on to the partially signed message as a form of an option. Eg. the exchange at this price is valid for 30 mins.
ExchangeFee uint(8) Fixed amount of bitcoin being paid to an exchange for facilitating a transfer. Example: 0.01
ExchangeFeeAddress PublicKeyHash Identifies the public address that the exchange fee should be paid to.
Transaction Summary
Index Input Description
0 Asset Senders Asset (token) Sending Public Address. Assets[i].AssetSenders[j].Index references these inputs.
Index Output Description
0 Contract Public Address for Asset X Enough for the costs of the responding action, including any bitcoins being transfered, and the Contract Fee.

Settlement

Settles the transfer request of bitcoins and tokens from transfer (T1) actions.

Action Code T2
Field Type Description
Assets AssetSettlement[8] The Assets settled by the transfer action.
Timestamp Timestamp Timestamp in nanoseconds of when the smart contract created the action. Cannot be changed by the administration, operator. Smart contract controls.
Transaction Summary
Index Input Description
0 Contract Public Address (Asset X) Contract (Asset X) in response to a transfer action with Asset X being sent to another address(es).
Index Output Description
0 Asset 1 Settlement Address X Address X that is being settled for Asset 1.