This is an old revision of the document!
Fungible vs Non-Fungible Tokens:
Think about the following example if fungible or non-fungible:
ESDT stands for Elrond Standard Digital Token.
Custom tokens at native speed and scalability, like EGLD.
The Elrond network natively supports the issuance of custom tokens, without the need for contracts such as ERC20 (Ethereum), but addressing the same use-cases. And due to the native in-protocol support, transactions with custom tokens do not require the VM at all. In effect, this means that custom tokens are as fast and as scalable as the native EGLD token itself.
The balances of ESDT tokens held by an Account are stored directly under the data trie of that Account. It also implies that an Account can hold balances of any number of custom tokens, in addition to the native EGLD balance. The protocol guarantees that no Account can modify the storage of ESDT tokens, neither its own nor of other Accounts.
ESDT tokens can be issued, owned and held by any Account on the Elrond network, which means that both users and smart contracts have the same functionality available to them. Due to the design of ESDT tokens, smart contracts can manage tokens with ease, and they can even react to an ESDT transfer.
ESDT tokens are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a token, one must provide a token name, a ticker, the initial supply, the number of decimals for display purpose and optionally additional properties. The issuance cost is set to 0.05 EGLD.
The receiver address erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u
is a built-in system smart contract (not a VM-executable contract), which only handles token issuance and other token management operations, and does not handle any transfers. The contract will add a random string to the ticker thus creating the token identifier. The random string starts with “-” and has 6 more random characters (3 bytes - 6 characters hex encoded). For example, a token identifier could look like ALC-6258d2.
If you want to make an erdpy
transaction use the info from Elrond documentation to correctly format your parameters.
Issuance example:
IssuanceTransaction { Sender: erd1sg4u62lzvgkeu4grnlwn7h2s92rqf8a64z48pl9c7us37ajv9u8qj9w8xg Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u Value: 50000000000000000 # (0.05 EGLD) GasLimit: 60000000 Data: "issue" + "@416c696365546f6b656e73" + // "AliceTokens" hex encoded "@414c43" + // "ALC" hex encoded "@f3d7b4c0" + // 4091000000 hex encoded "@06" // 6 hex encoded }
Issue an ESDT token of your own.
LocalMintTransaction { Sender: <address with ESDTRoleLocalMint role> Receiver: <same as sender> Value: 0 GasLimit: 300000 Data: "ESDTLocalMint" + "@" + <token identifier in hexadecimal encoding> + "@" + <supply to mint in hexadecimal encoding> }
Verify if the transaction worked.
Assign ESDTRoleLocalMint to your address:
RolesAssigningTransaction { Sender: <address of the ESDT manager> Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u Value: 0 GasLimit: 60000000 Data: "setSpecialRole" + "@" + <token identifier in hexadecimal encoding> + "@" + <address to assign the role(s) in a hexadecimal encoding> + "@" + <role in hexadecimal encoding> + "@" + <role in hexadecimal encoding> + ... }
You can find more details here