Contract Rollout
Contracts should have a substantial and prolonged testing period - before substantial money is put at risk.
At minimum, you should:
- Have a full test suite with 100% test coverage (or close to it)
- Deploy on your own testnet
- Deploy on the public testnet with substantial testing and bug bounties
- Exhaustive testing should allow various players to interact with the contract at volume
- Deploy on the mainnet in beta, with limits to the amount at risk
Automatic Deprecation
During testing, you can force an automatic deprecation by preventing any actions, after a certain time period. For example, an alpha contract may work for several weeks and then automatically shut down all actions, except for the final withdrawal.
modifier isActive() {
if (block.number > SOME_BLOCK_NUMBER) {
throw;
}
_;
}
function deposit() public
isActive() {
// some code
}
function withdraw() public {
// some code
}
Restrict amount of Ether per user/contract
In the early stages, you can restrict the amount of Ether for any user (or for the entire contract) - reducing the risk.