The goal of this technical challenge is to demonstrate the challengers ability to:
- produce Solidity code
- innovate on Ethereum primitives
- follow best practices
The challenger would have to create a simple voting app, it could be a custom one or a similar to a solidity documentation example.
Voting weight of a voter should be based on their stake in the Balancer Pool. If the proposal is passed, it should be executed. The contract should allow stakers to add / remove
Owners from the gnosis safe based on their voting weight as a result of the vote. This functionality should be demonstrated in a happy path simulation similar to the one here.
Example of a contract interaction flow:
(create proposal) => (vote on a proposal) => (execute proposal) => (add/remove owner)
The challenger will take care of:
- Writing code according to the standards of the PrimeDAO contracts-v2 repo and based on the requirements stated earlier
- Testing their codebase
- Cleaning up the code and writing comments
- Deploy to Rinkeby testnet
- Add a simple front-end
- Add test coverage tools and achieve 100% statement test coverage
- Check out PrimeDAO tests setup script for Balancer pool creation.
- GnosisSafe contract could be cloned locally and simplified by removing
authorized
modifier from functions inbase/OwnerManager.sol
. - The proposals in this app should be dynamically added after the contract deployment. Proposal in itself have a command to execute a function in GnosisSafe in encoded form(for example, add owner to gnosis).
- If you want to implement GnosisSafe with
authorised
modifier, we recommend you to look intoexecTransaction
function andcheckTransaction
function in theGnosisSafe.sol
.