1 | 'use strict'
|
2 |
|
3 | var tape = require('tape')
|
4 | var disassemble = require('../src/code/disassembler').disassemble
|
5 |
|
6 | tape('Disassembler', function (t) {
|
7 | t.test('empty', function (st) {
|
8 | st.plan(1)
|
9 | st.equal(disassemble(''), '')
|
10 | })
|
11 | t.test('add', function (st) {
|
12 | st.plan(1)
|
13 | st.equal(disassemble('0x01'), 'add')
|
14 | })
|
15 | t.test('push', function (st) {
|
16 | st.plan(1)
|
17 | st.equal(disassemble('0x640203'), '0x0203000000')
|
18 | })
|
19 | t.test('complexcode', function (st) {
|
20 | st.plan(1)
|
21 | var code = '60606040526009600060005055607e8060186000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480630dbe671f146039576035565b6002565b3460025760486004805050604a565b005b6000600090505b600a811015607a5760006000818150548092919060010191905055505b80806001019150506051565b5b5056'
|
22 | var asm = `mstore(0x40, 0x60)
|
23 | 0x09
|
24 | 0x00
|
25 | pop(0x00)
|
26 | sstore
|
27 | 0x7e
|
28 | dup1
|
29 | 0x18
|
30 | 0x00
|
31 | codecopy
|
32 | 0x00
|
33 | return
|
34 | mstore(0x40, 0x60)
|
35 | calldataload(0x00)
|
36 | 0x0100000000000000000000000000000000000000000000000000000000
|
37 | swap1
|
38 | div
|
39 | dup1
|
40 | 0x0dbe671f
|
41 | eq
|
42 | 0x39
|
43 | jumpi
|
44 | jump(0x35)
|
45 | label1:
|
46 | jump(0x02)
|
47 | label2:
|
48 | jumpi(0x02, callvalue())
|
49 | 0x48
|
50 | 0x04
|
51 | dup1
|
52 | pop
|
53 | pop
|
54 | jump(0x4a)
|
55 | label3:
|
56 | stop()
|
57 | label4:
|
58 | 0x00
|
59 | 0x00
|
60 | swap1
|
61 | pop
|
62 | label5:
|
63 | 0x0a
|
64 | dup2
|
65 | lt
|
66 | iszero
|
67 | 0x7a
|
68 | jumpi
|
69 | 0x00
|
70 | 0x00
|
71 | dup2
|
72 | dup2
|
73 | pop
|
74 | sload
|
75 | dup1
|
76 | swap3
|
77 | swap2
|
78 | swap1
|
79 | 0x01
|
80 | add
|
81 | swap2
|
82 | swap1
|
83 | pop
|
84 | sstore
|
85 | pop
|
86 | label6:
|
87 | dup1
|
88 | dup1
|
89 | 0x01
|
90 | add
|
91 | swap2
|
92 | pop
|
93 | pop
|
94 | jump(0x51)
|
95 | label7:
|
96 | label8:
|
97 | pop
|
98 | jump`
|
99 | st.equal(disassemble(code), asm)
|
100 | })
|
101 | })
|