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:
-
I would look at developing, testing and deploying your smart contracts using tools such as Truffle, Buidler or OpenZeppelin.
-
Regards testing, Writing Automated Tests and Test smart contracts like a rockstar are great places to start.
-
Prior to an audit, I recommend going through the OpenZeppelin checklist before an audit.
-
To organize an audit, you would need to engage a third party auditor such as OpenZeppelin, see openzeppelin.com/security-audits for details.
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.
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