Key Information

Register
Submit
The challenge is finished.
Show Deadlines

Challenge Overview

Mythril has an exploration feature for searching and analyzing smart contracts on the Ethereum blockchain:
https://github.com/ConsenSys/mythril#blockchain-exploration

To enable this feature, Mythril builds its own smart contract database. The contract data is received from an Ethereum node over IPC or RPC (--sync-db command). This is however slow and inefficient. A much better way would be to directly access the LevelDB database of a locally installed go-ethereum node.

In this challenge, your task is to add a local geth leveldb interface to Mythril. This should be accomplished by writing a Python class capable of doing the following:
  • Obtain the runtime bytecode and balance of a contract account by address;
  • Access the storage of any account by address;
  • Iterate through all existing contract accounts;
  • Iterate through a subset of contract accounts, such as those with non-zero balance.
Use of the leveldb interface should be optional. By passing the --leveldb flag to Mythril, users should be able to execute the following existing functions without the need to first sync over RPC:
$ myth -d/-x/-g -a [address] # disassemble / analyze / create CFG of contract at address
[address]
$ myth —search # search all smart contracts for opcode and function patterns
$ myth --storage 0,1 # read account storage contents

Notes:

States in the leveldb are represented as a Merkle patricia tree (the “trie"). The goethereum implementation can be found here:
https://github.com/ethereum/goethereum/blob/55599ee95d4151a2502465e0afc7c47bd1acba77/core/state/database.g
o


Article about the Trie:
https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/

Related issue on the Mytrhil Github repo:
https://github.com/ConsenSys/mythril/issues/15

A few stack overflow posts (unfortunately not very helpful):
https://ethereum.stackexchange.com/questions/1635/how-to-parse-blocks-withpython
https://ethereum.stackexchange.com/questions/5999/format-of-leveldb-files-in-nodesdirectory-trouble-pulling-contents-with-python

Final Submission Guidelines

Submit Git patch for Mythril (against the latest commit in master branch, which is a603772956bca7059635627f87966fa8879e900b at the moment of writing), along with verification instructions and a brief demo video.

Reliability Rating and Bonus

For challenges that have a reliability bonus, the bonus depends on the reliability rating at the moment of registration for that project. A participant with no previous projects is considered to have no reliability rating, and therefore gets no bonus. Reliability bonus does not apply to Digital Run winnings. Since reliability rating is based on the past 15 projects, it can only have 15 discrete values.
Read more.

ELIGIBLE EVENTS:

2018 Topcoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board
?

Approval:

User Sign-Off
?

CHALLENGE LINKS:

Review Scorecard

?