Panoramix uses an unusual, for decompilers, technique called symbolic execution.
In short, it has a virtual machine that operates on symbols and algebra instead of concrete values and arithmetic.
This method is usually used for formal verification of contracts, but surprisingly, it seems, nobody tried using it to deliver a readable source code.
It also has a custom made memory model which, I hope, is faster than a generic SMT solver-based one. Filled with bugs though, which you can see especially near the loops and dynamic-length variables.
The best practices of cowboy coding, and duct-tape programming were used to deliver it within one month, starting from scratch. It will be open-sourced, just let me clean up the source code a bit.
Special thanks to:
- Remco Bloemen of ZRX, for feedback on algorithms and EVM.
- Projects from Warsaw Blockchain Hub:
- Cryptoverse for initial testing.
- Kuba of Solidstamp, and Leonid of ZRX for initial testing.
- Ligi of WallEth for help with Methadata, which was inspiration for this project.
The following projects were super-useful when developing the decompiler:
- py-evm - a small bit of it's code went into Panoramix, also, an amazing educational tool for learning how EVM works internally
- 4bytes.directory - originally used as a basis for function names
- Parity - running the node behind code crawling
- Infura - the original node used for code fetching
- Bloxy.info - helped me understand what some contracts do
- Etherscan.io - for ABI files and source codes of contracts
I'm Tomasz Kolinko, and I've been in the blockchain field since 2012. Launched a first decentralised oracles proof of concept and whitepaper in 2014 (Orisi.org), cofounded Neufund (although left very early on), founded Trivial.co, which was I think the first project ever to tokenize real-world items, and now pivoted into a token explorer.
Currently single, since I spend all my time doing the decompiler instead of Tindering, which my friends and family suggest.
Based between Warsaw, Berlin & San Francisco.