Skip to content

ERC Conformance

Dan Guido edited this page Aug 26, 2020 · 7 revisions

slither-check-erc checks for ERC's conformance.

Features

slither-check-erc will check that:

  • All the functions are present
  • All the events are present
  • Functions return the correct type
  • Functions that must be view are view
  • Events' parameters are correctly indexed
  • The functions emit the events
  • Derived contracts do not break the conformance

Supported ERCs

  • ERC20: Token standard
  • ERC223: Token standard
  • ERC777: Token standard
  • ERC165: Standard interface detection
  • ERC721: Non-fungible token standard
  • ERC1820: Pseudo-introspection registry contract

Usage:

slither-check-erc contract.sol ContractName

For example, on

contract ERC20{

    event Transfer(address indexed,address,uint256);

    function transfer(address, uint256) public{

        emit Transfer(msg.sender,msg.sender,0);
    }

}

The tool will report:

# Check ERC20

## Check functions
[ ] totalSupply() is missing 
[ ] balanceOf(address) is missing 
[✓] transfer(address,uint256) is present
	[ ] transfer(address,uint256) -> () should return bool
	[✓] Transfer(address,address,uint256) is emitted
[ ] transferFrom(address,address,uint256) is missing 
[ ] approve(address,uint256) is missing 
[ ] allowance(address,address) is missing 
[ ] name() is missing (optional)
[ ] symbol() is missing (optional)
[ ] decimals() is missing (optional)

## Check events
[✓] Transfer(address,address,uint256) is present
	[✓] parameter 0 is indexed
	[ ] parameter 1 should be indexed
[ ] Approval(address,address,uint256) is missing