Note
Tokenization is a premium feature that requires an additional purchase. If you don’t have access to this feature, contact your Customer Success Manager to discuss having it enabled in your Fireblocks workspace.
Overview
The CMTA token is an open standard from the Capital Markets and Technology Association (CMTA) and acts as a framework for tokenized securities in Switzerland. It allows the issuance and management of ERC-20 tokens representing equity securities. It can also be used for other forms of financial instruments, such as debt securities. Even though this token contract was developed to enable tokenization in compliance with Swiss law, it can be used in other jurisdictions as well.
Important
Fireblocks recommends you work closely with the CMTA to understand and operate this token effectively.
The CMTA token contract offers:
- Basic minting, burning, and transferring operations.
- Contract pausing and specific account freezing.
- Gasless transactions.
- Conditional transfers via a rule engine.
This article describes several common operations you can use for smart contracts deployed from this template.
Deploying
When deploying the Token Locker Contract, you must define the following parameters:
- Network: The blockchain where you’re deploying the contract.
-
Forwarder irrevocable: The forwarder’s address, which is required for gasless support.
- If you aren’t using gasless support, enter 0x0000000000000000000000000000000000000000. There should be 40 zeroes after the 0x.
- Admin: The address you want to be granted the Default Admin Role, which can grant and revoke other smart contract roles.
- Name irrevocable: The token’s name.
- Symbol irrevocable: The token’s symbol.
- Token id: The name of the token ID. (This is an additional text identifier.)
- Terms: The URL link to the terms associated with the token.
-
Rule engine: The address of the Rule Engine contract you want to apply to token transfers.
- If you are deploying the contract without a linked Rule Engine contract, enter 0x0000000000000000000000000000000000000000. There should be 40 zeroes after the 0x.
- Information: Additional information describing the token.
- Flag: A numerical flag, such as a version number.
Minting
Before minting tokens, the Minter role must be granted to an address. The Default Admin role must assign the Minter role after the contract has been deployed.
- On the Tokenization page, select More Actions (...) > Manage contract corresponding to the relevant smart contract.
- Copy the Minter role hash from the Read functions.
- Select Write and use the grantRole function.
- Enter the hash for the Minter role you copied in step 2, and then enter the address that should be granted the role.
- Select Submit.
After the Minter role is granted, any address with the Minter role can mint tokens. The user of that address can mint tokens by selecting Mint corresponding to the desired token on the Tokenization page.
Learn more about minting tokens.
Burning
Before burning tokens, the Burner role must be granted to an address. Only an address with the Default Admin role can assign the Burner role to an address.
- On the Tokenization page, select More Actions (...) > Manage contract corresponding to the relevant smart contract.
- Copy the Burner role hash from the Read functions.
- Select Write and use the grantRole function.
- Enter the hash for the Burner role you copied in step 2, and then enter the address that should be granted the role.
- Select Submit.
After the Burner role is granted, the address with the Burner role can burn tokens. The user of that address can burn tokens by selecting Burn corresponding to the desired token on the Tokenization page.
Learn more about burning tokens.
Gasless support
The CMTA token contract allows you to enable gasless support for tokens deployed using the contract. When deploying, you must define an address for the forwarder contract responsible for verifying the sender’s address during gasless transactions. The forwarder cannot be changed after deployment.
Learn more about the CMTA token contract’s gasless support.
Using a Rule Engine
The CMTA token contract can be used in conjunction with an optional Rule Engine contract, which can be used to apply transfer restrictions to the CMTA token through allowlisting, denylisting, and so on. Rule Engine contracts must be created and deployed via Fireblocks or external platforms before being connected to the CMTA token contract you deployed within Fireblocks.
Review CMTA’s documentation for more information on Rule Engines. You can contact Fireblocks Support to enable Rule Engine deployment from the Fireblocks Console and API.
Pausing/Unpausing
If needed, you can completely pause the contract from functioning. This may be useful if you believe the contract has been compromised. After resolving any security implications, you can then unpause the contract to resume functionality.
Only the following functions can be called while the contract is paused:
- revokeRole
- renounceRole
- upgradeToAndCall
- salvageERC20
- salvageGas
- initialize
- grantRole
- version
- supportsInterface
- contractUriUpdate
The token owner can pause and unpause the contract as needed.
- On the Tokenization page, select More Actions (...) > Manage contract corresponding to the relevant smart contract.
- Select Write and use the Pause or Unpause function.
- Select the token owner’s vault account.
- Select Submit.