Most tokens are ERC20 tokens with varying implementations, and varying protections against bugs. However, there is the ERC223 token standard, which is an attempt to fix some of the problems in ERC20. It seems to be at least somewhat backward compatible with ERC20.
So, if deploying a token today, what would be the best implementation to base it on?
- ERC223 token, latest version: https://github.com/Dexaran/ERC23-tokens/tree/master/token/ERC223
- ERC223 token, "recommended" version: https://github.com/Dexaran/ERC23-tokens/tree/Recommended
- ERC223 token, backward compatible with ERC20: https://github.com/Dexaran/ERC23-tokens/tree/ERC20_compatible/token/ERC223
- ERC20 token, OpenZeppelin: https://github.com/OpenZeppelin/zeppelin-solidity/tree/master/contracts/token
- ERC20 token, ConsenSys: https://github.com/ConsenSys/Tokens/tree/master/Token_Contracts/contracts
The goals are, in decreasing order of importance:
- Security: the implementation should be free of security vulnerabilities
- Future Proof: the token should be tradeable as long as possible without needing to be replaced
- Compatibility: the token should work with as many exchanges and wallets as possible