An ethereum virtual machine (EVM) bytecode decompiler
npm install evm-bugfix> npm i evm
* getBytecode() - _Get raw bytecode (not really useful; same as input)_
* getOpcodes() - _Returns opcodes including pc and pushData (if included)_
* getFunctions() - _Parse functions from their signatures in bytecode_
* getEvents() - _Parse events from their signatures in bytecode_
* getJumpDestinations() - _Get array of program counters from JUMPDEST opcodes_
* getSwarmHash() - _Get Swarm hash (if any) for contract metadata_
* reset() - _Reset the EVM state (stack, memory, etc.)_
* parse() - _Interpret opcodes by looping over them, returns array of interpreted opcodes_
* decompile() - _Decompile bytecode into readable Solidity-like pseudocode_
#### Node.js
``javascript
const { EVM } = require("evm");
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("https://api.mycryptoapi.com/eth"));
web3.eth.getCode("0x06012c8cf97BEaD5deAe237070F9587f8E7A266d").then(code => { / CryptoKitties contract /
const evm = new EVM(code);
console.log(evm.getOpcodes()); / Get opcodes /
});
`
#### Browser
`javascript`
const { EVM } = window.EVM_Utils;
const web3 = new Web3(window.web3.currentProvider);
web3.eth.getCode("0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359", function(err,code) { / DAI contract /
if(err) throw err;
const evm = new EVM(code);
console.log(evm.getOpcodes()); / Get opcodes /
});
#### Node.js
`javascript
const { EVM } = require("evm");
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("https://api.mycryptoapi.com/eth"));
web3.eth.getCode("0x06012c8cf97BEaD5deAe237070F9587f8E7A266d").then(code => { / CryptoKitties contract /
const evm = new EVM(code);
console.log(evm.getFunctions()); / Get functions /
console.log(evm.getEvents()); / Get events /
console.log(evm.decompile()); / Decompile bytecode /
});
`
#### Browser
`javascript`
const { EVM } = window.EVM;
const web3 = new Web3(window.web3.currentProvider);
web3.eth.getCode("0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359", function(err,code) { / DAI contract /
if(err) throw err;
const evm = new EVM(code);
console.log(evm.getFunctions()); / Get functions /
console.log(evm.getEvents()); / Get events /
console.log(evm.decompile()); / Decompile bytecode /
});
#### Node.js
`javascript
const { Transaction } = require("evm");
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("https://api.mycryptoapi.com/eth"));
web3.eth.getTransaction("0xd20a8d888a3f29471ea41ea77cc2d95ccd79ade1eaad059e83524e72b9adf962").then(transactionData => {
const transaction = new Transaction();
transaction.setInput(transactionData.input);
console.log(transaction.getFunction()); / Get function /
});
`
#### Browser
`javascript``
const { Transaction } = window.EVM;
const web3 = new Web3(window.web3.currentProvider);
web3.eth.getTransaction("0xd20a8d888a3f29471ea41ea77cc2d95ccd79ade1eaad059e83524e72b9adf962", function(err,transactionData) {
if(err) throw err;
const transaction = new Transaction();
transaction.setInput(transactionData.input);
console.log(transaction.getFunction()); / Get function /
});