Currently we are working with specific high-impact projects as they prepare to deploy their contract systems. We encourage projects to launch when ready, rather than trying to time markets. Our criteria for readiness extends beyond a basic code review, to include requirements for specifications, test drivers, static analysis, and staged roll outs.
This approach is informed by our experience working with clients like Gnosis, WeiFund, SingularDTV, uPort, and adChain. ConsenSys Diligence is also actively involved in writing and reviewing code deployed in production systems on private chains at some of the largest Fortune 500 companies in the world.
Through this starter challenge, we hope to build developer talent around smart contract development, testing, and bug discovery to serve the betterment of the Ethereum development community. There will be additional challenges that test your growing capabilities and further opportunities to potentially join the ConsenSys Diligence team.
The nature of this first challenge is rather simple, and is comprised of the following parts:
- Finish the bank.sol smart contract based on our prompt (provided below) and pass all the tests
- Identify bugs/exploits in the amazon.sol smart contract and then develop a test script for the contract to run (and prove that it is ready for ‘deployment’)
- Submit both smart contract bundles for review
Bank.sol Smart Contract Prompt: Create a smart contract in the Simple Bank Problem Set’s contracts subfolder that emulates the simple functions of a bank. The smart contract should safely commit who has an account and how much they have in their account. In addition, users should be able to do the following:
- Enroll and create a bank account, in which they will start with 1000 tokens
- Deposit an amount into their account
- Withdraw an amount into their account equal to or less than their current account balance
- Check their current balance
- Tests to see if the “addItem” function works
- Tests to see if the “buyItem” function works
- Tests to see if the “shipItem” function works
- Tests to see if the “receiveItem” function works