Points to consider when creating a fungible token (ERC20, ERC777)

If you are thinking about creating a fungible token (ERC20, ERC777), you may want to consider the following points:

  • What is the purpose of the token?
  • Why would someone need to use the token?
  • Could the solution operate without a token?
  • Could the solution operate using either the native currency of the blockchain (Ether) or an existing stable token instead of the token?
  • Could the solution be cloned and have the token removed, yet still operate (without the token)?
  • How does transaction fees (gas price) impact usage of the token?
  • Do users need to have the native currency of the blockchain (Ether) to use the token or is there an option to use meta transactions?

If you plan for your token to potentially have value, you should seek appropriate advice on regulatory compliance and your solution should have appropriate testing and auditing:

If you have access control for minting, pausing, upgrades you should design your governance behind when and how these functions can be used and communicate this to your potential token users.

You also should design your tokenomics of your token.

:warning: If you create a fee on transfer or deflationary token (burn a percentage on transfer) this can cause issues when used with other contracts such as: https://medium.com/balancer-protocol/incident-with-non-standard-erc20-deflationary-tokens-95a0f6d46dea

ERC777

For ERC777 you need to consider reentrancy, see Reentrancy After Istanbul


This is a wiki post, please edit/update

1 Like
Create a website with an ERC20 token with Gasless transactions
ERC777 contract best practice
Create an ERC20 using Truffle, without writing Solidity
Verify Crowdsale contract on Etherscan deployed using Remix
Token for social campaigns to raise funds
How to request a security audit from OpenZeppelin
Creating Capped ERC20 gives error in contract constructor
Will burning a percentage of the amount transferred for an ERC20 token cause issues?
Is there a way to add burn function to deployed ERC20 token?
Upgradeable ERC20 token with partial burn on transfer
Create deflationary ERC20 token
Is it safe to use Crowdsales (OpenZeppelin Contracts 2.x) together with the upgradable version of ERC20?
Migrate ERC20 code to OpenZeppelin ERC20 implementation
Design pattern for a trustless ICO?
Unable to deploy and verify ERC20 token with burn and stop burn feature
How to create a crowdsale for an ERC20 contract?
How to add a Time lock token function on several addresses?
Want an example of ERC918 Mineable Token and how it can be mined?
How to add a Time lock token function on several addresses?
Sell all the investor tokens
Help creating an ERC20 token
Help creating an ERC20 token using Remix
Help creating an ERC20 token
Error using ERC20 transferFrom in a buy function selling tokens
Error verifying ERC20 without constructor arguments on Etherscan
Is there an exchange on Ethereum that will add a new ERC20 token?
Coding Journey: An Idea turned Obsession
Error using ERC20 transferFrom in a buy function selling tokens
Turn on deflationary functionality after a specific transaction
Community token based on ERC-777
Release an ERC-20 token automatically instead of calling release method after locking period?
Deploying contract for farming but don't understand "_allocPoint" & "_withUpdate"
Help me write an erc20 token and a crowdsale contract
Where are Crowdsale contracts in OpenZeppelin Contracts 3.0?
Creating an ERC-20 token with OpenZeppelin v3.x?
Can we use virtual as well as override for the same function?
How to create a Crowdsale with Solidity 0.6?
Error verifying contract with no constructor arguments on Etherscan