EVM (Ethereum Virtual Machine) assembler, WIP
Via npm on Node:
npm install -g evmasm
Then run
evmasm file.asm
The output is the compiled bytecode for Ethereum Virtual Machine.
The assembler source code is compatible with the solc --asm
output (after commenting
some lines starting with ==...
)
Asembler source code sample:
// ======= empty.sol:Empty =======
EVM assembly:
/* "empty.sol":59:78 contract Empty {
... */
mstore(0x40, 0x60)
jumpi(tag_1, iszero(callvalue))
0x0
dup1
revert
tag_1:
tag_2:
dataSize(sub_0)
dup1
dataOffset(sub_0)
0x0
codecopy
0x0
return
stop
sub_0: assembly {
/* "empty.sol":59:78 contract Empty {
... */
mstore(0x40, 0x60)
tag_1:
0x0
dup1
revert
auxdata: 0xa165627a7a7230582046b5464930e5eb5db6027b5aaae7f9140430cdd322d5eb42de2e546521573bd90029
}
Compiled using solc --asm
from contract source code:
// Simple empty contract
contract Empty {
}
Install
npm install evmasm
Usage
var evmasm = require('evmasm');
var bytecode = evmasm.compile('mstore(0x40, 0x60)');
console.log(bytecode); // 6060604052
There are new functions to support literal data:
opcode(0xfa) // new opcode
data(0x01020304) // arbitrary data
- 0.0.1 Published
- 0.0.2 Published, opcode and data functions
- 0.0.3 Published, define custom opcode and data, keccak256 opcode (old sha3)
Feel free to file issues and submit pull requests — contributions are welcome.
If you submit a pull request, please be sure to add or update corresponding
test cases, and ensure that npm test
continues to pass.