A lot of projects these days hire blockchain developers as contractors. These contractors can easily lie to their employers who do not have blockchain programming expertise and say that the token that they produced is ERC223 when it in fact isn’t. The project itself the proceeds unknowingly lying to their customers.
We want to publish this guide for project owners so they can check whether their token is ERC223 or ERC20. And to do that we are going to use Radex and EtherScan.
How does this test work?
Technical explanation ahead, feel free to skip it if you simply want to test and get the result fast.
The main difference between ERC20 and ERC223 is how token transfers to smart contracts are implemented. ERC20 standard does not have any means for receiving smart contract to know that it received something. It’s like when you go to a store, instead of paying something to a merchant you would wait until they are not looking and then drop some coins in their pocket. This poor design decision has already caused early crypto investors to lose millions of dollars.
ERC20 proponents then suggest that you should open up your wallet to the merchant and let them withdraw money from your wallet. They went so far as to create weth - a ERC20 version of ETH. You can exchange ETH<>weth at any time. The only purpose that this token solves is to let merchants pull money from your wallet, something that any sane developer, such as ETH core team, would call a vulnerability.
ERC223 adds support for smart contracts to accept normal transfers by forcing developers to implement
tokenFallbackfunction that gets called on every token transfer. ERC223 tokens behave very similar to how native ETH behaves and allows developers to write safe and secure smart contracts. You can look at our reference implementation here.
How to test your token for compliance with ERC223 standard
Radex is our decentralized exchange for ERC223 tokens. Deposits on Radex are very simple - you send your token to the smart contract and it updates your balance. However, if you send a ERC20 token to any smart contract you will simply burn it.
This is what this test is based on: you will transfer a little bit of your token to Radex smart contract and will check to see if the balance got updated. If you balance updated - congratulations, you have a ERC223 token! If the transfer went through but your balance is still 0 - I am sorry, but your token is ERC20 and you just burned some of it.
- Using your favorite token wallet, such as MEW or Cipher, send a tiny amount of your token to Radex smart contract. The address of Radex smart contract is 0x9462eeb9124c99731cc7617348b3937a8f00b11f.
- Wait for the transaction to get mined.
- On Radex Etherscan page, in Read Contract section, check your balance (example screenshot attached). If it is greater than 0 - you have a ERC223 token. If the balance remains 0 - you have a ERC20 token.
This screenshot shows that this transaction has successfully deposited 1 DEBITUM token (address: 0x151202c9c18e495656f372281f493eb7698961d5) from token owner whose address is 0xec47322d205c0b2e67cee3fd7f5b5271aafd8fb2.