Challenge Overview
We look for Topcoder community’s member to fill copilot / release manager role in this project. The perfect candidate is proficient in Python and Ethereum ecosystems, and available to take care about the project on the permanent basis. Our expectations:
- You will track all incoming issues and PRs into Git repositories of Mythril and LASER-ethereum (coming from external users, not related to TC or the client); in general, we expect you reply them within 24h timeframe;
- You will go into technicalities of mythril and laser, and will be able to efficiently test incoming PRs and/or fixes produced by Topcoder community, to ensure they fix the issues, and don’t introduce any regression;
- When necessary, you’ll be running F2F and/or Code challenges at Topcoder platform to fix reported issues. In all cases you are expected to review code changes, to ensure production ready quality of code in the master branch of mythril; you’ll also release new versions of Mythril to public as soon as possible.
- For complex technical questions you will coordinate with the core client’s team; for any questions related to Topcode side, you’ll coordinate with us.
As a technical test for candidates we run two parallel challenges (here is the second challenge). We will select the member to fill the role from the winner(s) of these challenges. In case you are just interested in these challenges, but not in the proposed role, feel free to do the tasks and submit, just include into your submission a note that you don't want to be considered for the role.
Challenge Scope
Add precompiled contracts
The EVM specification defines four so-called ‘precompiled’ contracts. The four contracts in addresses 1, 2, 3 and 4 execute the elliptic curve public key recovery function (ecrecover), the SHA2 256-bit hash scheme, the RIPEMD 160-bit hash scheme and the identity function respectively.
Call to the ecrecover precompiled contract in assembly:
CALL 0x1
Currently, LASER-Ethereum ignores calls to the precompiled contracts. In this task, the precompiled contracts are to be implemented. When a precompiled contract is called, the result should be computed using the appropriate Python cryptographic libraries. Also create tests for each of the four precompiles.
Go-Ethereum implementation:
https://github.com/ethereum/go-ethereum/blob/master/core/vm/contracts.go