How to create and deploy an XRC-20 token on the XinFin blockchain network

ruslan wing
6 min readDec 30, 2021

What is the XRC-20 token?

XRC-20 stands for XinFin Request for Comment, and 20 is the proposal identifier number. XRC-20 was designed to improve the XinFin XDC network.

XRC-20 is one of the most significant XRCs. It has emerged as the technical standard for writing smart contracts on the XinFin blockchain network, used for token implementation. XRC-20 contains a set of rules that all XinFin based tokens must follow.

XRC-20 defines tokens as blockchain-based assets that can be sent/received and have value. XRC-20 tokens are similar to Ethereum and Bitcoin in many aspects. However, the most significant difference is that instead of running on their own blockchain network, XRC-20 coins run on the XinFin blockchain network and use gas as the transaction fee.

Before the emergence of XRC-20, everyone who created tokens had to reinvent the wheel, which means all tokens were different from each other. For example, if a developer wanted to work with another token, they had to understand the entire smart contract code of that token due to the lack of any specific structure or guidelines for building new tokens. This was particularly painful for wallets and exchange platforms — adding different types of tokens required developers to go through the code of each and every token and understand it in order to handle those tokens on their platforms. Needless to say, it was rather difficult to add new tokens to any app. Today wallets and exchanges use the XRC-20 standard to integrate various standardized tokens onto their platforms and also facilitate easy exchange between XRC-20 tokens and other tokens. The XRC-20 token standard has made interaction between tokens almost seamless and painless.

Token smart contracts are not only responsible for creating tokens but also for handling transactions and keeping track of the balances of each token holder. To get some tokens one has to send some XDC to the token’s contract in return for allocated tokens.

XRC-20 is a standard or guideline for creating new tokens. The standard defines six mandatory functions that a smart contract should implement and three optional ones.

To start you can give your token a name, a symbol, and mention how dividable your token is, by specifying the decimals. XRC specifies a set of mandatory functions, which are a bit more complex and listed below:

  • total supply: A method that defines the total supply of your tokens, When this limit is reached the smart contract will refuse to create new tokens.
  • balance of: A method that returns the number of tokens a wallet address has.
  • transfer: A method that takes a certain amount of tokens from the total supply and gives it to a user.
  • transfer from: Another type of transfer method which is used to transfer tokens between users.
  • approve: This method verifies whether a smart contract is allowed to allocate a certain amount of tokens to a user, considering the total supply.
  • allowance: This method is exactly the same as the approved method except that it checks if one user has enough balance to send a certain amount of tokens to another.

If you know something about Object Oriented programming you can compare XRC-20 to an Interface. If you want your token to be an XRC-20 token, you have to implement the XRC-20 interface and that forces you to implement these 6 methods

Creating our own token

Now that we know what XRC-20 tokens are and how they work, let’s see how we can build and deploy our own token.

We’ll deploy our contract on the Apothem testnet. To get started, you will need the XDCPau browser extension to create a XinFin wallet and some test XDC, which you can get by going to the faucet. You’ll need to select Apothem Network on your XDCPay wallet and copy-paste the wallet address into the text field in the faucet, then click on get 1000 XDC.

Head over to the XinFin Remix IDE and make a new Solidity file, for example — token.sol

You can check out the code on Github here https://github.com/RuslanWing/XRC-20/blob/main/BKC.sol

Replace the symbol and name with your own
62 symbol = “BKC”;
63 name = “Boom Coin”;

set the decimal (value in which tokens can be divided, 0to8 decimal units can be used) and establish a total supply value as you wish:

64 decimals = 2;

65 _totalSupply = 100000;

Please change YOUR_XDCPay_WALLET_ADDRESS to your own wallet address (same wallet you specified to obtain test currency):

66 balances[YOUR_XDCPay_WALLET_ADDRESS] = _totalSupply;

67 emit Transfer(address(0), YOUR_XDCPay_WALLET_ADDRESS, _totalSupply);

Note: The total supply value must have additional trailing zeros as specified by the decimals field. For example, the decimals value in this contract is 2 and we need a total supply of 1000 tokens, so we’ll have to set the total supply variable to 100000 (simply because it won’t allow a decimal point).

Explanation of the code above:

Line 1: Declaring the solidity version

Line 3–4: Calling the Safe Math interface to use math functions in our contract.

Line 29–41: Calling the XRC-20 Interface to implement its functions.

Line 44–48: A Contract function to receive approval and execute a function in one call.

Line 52–56: Starting our BoomToken contract, creating a variable symbol of string type to hold our token’s symbol, a variable name of string type to hold our token’s name, variable decimals of unsigned integer type to hold the decimal value for the token division.

Line 58–59: Creating two mapping functions that will grant users the ability to spend these tokens.

Line 61–68: Initializing the constructor, setting symbol, name, decimals, and total supply value for our token. Declaring the total supply of the token to be equal to your wallet’s balance for this token.

Line 70–72: Function totalSupply which will govern the total supply of our token.

Line 74–76: Function balanceOf which will check the balance of a wallet address.

Line 78–83: Function transfer which will execute the transfer of tokens from the total supply to users.

Line 85–89: Function approve which will check if the total supply has the amount of token which needs to be allocated to a user.

Line 91–97: Function transferFrom which will facilitate the transfer of token between users.

Line 99–101: Function allowance which will check if a user has enough balance to perform the transfer to another user.

Line 103–108: Function approveAndCall which executes the transactions of buying and spending of tokens.

Line 110–112: Fallback function to prevent accounts from directly sending XDC to the contract, this prevents the users from spending gas on transactions in which they forget to mention the function name.

Compile the smart contract and deploy it using injected Web3 (make sure to select Apothem testnet on XDCPay before compiling the contract). Approve the transaction from XDCPay

Note: We need to deploy the main token contract, select the name of the contract appropriately under the contracts section before deploying the contract (BKC Token here)..

If you receive an error message before deployment “This contract may be abstract”, make sure to select the appropriate contract under the Contract tab.

Confirm the transaction in XDCPay

That’s it! your token contract is now deployed on XinFin Apothem testnet!

To get the token in XDCPay, go to the “Deployed Contracts” section in Remix and copy the deployed contract’s address using the copy button near the contract’s name.

Open XDCPay and click on the Add Token button, select the Custom Token option and paste the contract’s address in the first field. And then enter Token symbol and decimal.

Click on Add and your token will be added to the wallet, it will be available under the assets section in XDCPay.

Conclusion

Congratulations on successfully creating your very own token/coin on the XinFin network! And if you wish to create a token without coding you can do it through my wish platform with a few clicks.

--

--