imageTokens: ERC-20 and NFTs

How to make an ERC-20 or ERC-721 token contract that will work with on-chain governance.

Tally expects tokens to implement the relevant standard, like ERC-20arrow-up-right or ERC-721arrow-up-right. Also, Tally needs the token contract to implement the EIP-5805 standardarrow-up-right for delegation and voting power checkpointing.

Specifically, Tally needs the following methods and event signatures for indexing and web3 calls:

Event signatures

Tally's API listens to event logs from token contracts when indexing them. Your token contract will need to maintain the same event signatures:

event DelegateVotesChanged(
    address indexed delegate, 
    uint previousBalance, 
    uint newBalance
);
event DelegateChanged(
    address indexed delegator, 
    address indexed fromDelegate, 
    address indexed toDelegate
);

Your contract will need to support transfer events, too. Tally works with both ERC20 transfer events and ERC721 events.

ERC20:

event Transfer(
    address indexed from, 
    address indexed to, 
    uint256 amount
);

ERC721:

Function signatures

Your token contract also needs to implement voting and delegation functions. If you are using an ERC20 token, you can use the ERC20Votesarrow-up-right extension from OpenZeppelin contracts library.

If you're using an ERC71 token, you can use OpenZeppelin's ERC721Votesarrow-up-right extension.

The Tally frontend helps users make these function calls to delegate their votes:

Name

The token contract must implement the name() function, so that Tally knows what to call the token.

Symbol

The token contract must implement a symbol() function, so that Tally knows the short name of the token.

Decimals

ERC20 token contracts must implement a decimals() function, so that Tally can correctly render token balances:

Last updated

Was this helpful?