aboutsummaryrefslogtreecommitdiffstats
path: root/chain
diff options
context:
space:
mode:
Diffstat (limited to 'chain')
-rw-r--r--chain/asm.go13
-rw-r--r--chain/types.go312
2 files changed, 9 insertions, 316 deletions
diff --git a/chain/asm.go b/chain/asm.go
index 875321c1c..4ca6c7fdf 100644
--- a/chain/asm.go
+++ b/chain/asm.go
@@ -4,7 +4,8 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/ethutil"
+ "github.com/ethereum/go-ethereum/vm"
+ "github.com/ethgo.old/ethutil"
)
func Disassemble(script []byte) (asm []string) {
@@ -17,14 +18,18 @@ func Disassemble(script []byte) (asm []string) {
// Get the memory location of pc
val := script[pc.Int64()]
// Get the opcode (it must be an opcode!)
- op := OpCode(val)
+ op := vm.OpCode(val)
asm = append(asm, fmt.Sprintf("%04v: %v", pc, op))
switch op {
- case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
+ case vm.PUSH1, vm.PUSH2, vm.PUSH3, vm.PUSH4, vm.PUSH5, vm.PUSH6, vm.PUSH7, vm.PUSH8,
+ vm.PUSH9, vm.PUSH10, vm.PUSH11, vm.PUSH12, vm.PUSH13, vm.PUSH14, vm.PUSH15,
+ vm.PUSH16, vm.PUSH17, vm.PUSH18, vm.PUSH19, vm.PUSH20, vm.PUSH21, vm.PUSH22,
+ vm.PUSH23, vm.PUSH24, vm.PUSH25, vm.PUSH26, vm.PUSH27, vm.PUSH28, vm.PUSH29,
+ vm.PUSH30, vm.PUSH31, vm.PUSH32:
pc.Add(pc, ethutil.Big1)
- a := int64(op) - int64(PUSH1) + 1
+ a := int64(op) - int64(vm.PUSH1) + 1
if int(pc.Int64()+a) > len(script) {
return
}
diff --git a/chain/types.go b/chain/types.go
deleted file mode 100644
index 9871ae07b..000000000
--- a/chain/types.go
+++ /dev/null
@@ -1,312 +0,0 @@
-package chain
-
-import (
- "fmt"
-)
-
-type OpCode int
-
-// Op codes
-const (
- // 0x0 range - arithmetic ops
- STOP = 0x00
- ADD = 0x01
- MUL = 0x02
- SUB = 0x03
- DIV = 0x04
- SDIV = 0x05
- MOD = 0x06
- SMOD = 0x07
- EXP = 0x08
- BNOT = 0x09
- LT = 0x0a
- GT = 0x0b
- SLT = 0x0c
- SGT = 0x0d
- EQ = 0x0e
- NOT = 0x0f
-
- // 0x10 range - bit ops
- AND = 0x10
- OR = 0x11
- XOR = 0x12
- BYTE = 0x13
- ADDMOD = 0x14
- MULMOD = 0x15
-
- // 0x20 range - crypto
- SHA3 = 0x20
-
- // 0x30 range - closure state
- ADDRESS = 0x30
- BALANCE = 0x31
- ORIGIN = 0x32
- CALLER = 0x33
- CALLVALUE = 0x34
- CALLDATALOAD = 0x35
- CALLDATASIZE = 0x36
- CALLDATACOPY = 0x37
- CODESIZE = 0x38
- CODECOPY = 0x39
- GASPRICE = 0x3a
- EXTCODESIZE = 0x3b
- EXTCODECOPY = 0x3c
-
- // 0x40 range - block operations
- PREVHASH = 0x40
- COINBASE = 0x41
- TIMESTAMP = 0x42
- NUMBER = 0x43
- DIFFICULTY = 0x44
- GASLIMIT = 0x45
-
- // 0x50 range - 'storage' and execution
- POP = 0x50
- //DUP = 0x51
- //SWAP = 0x52
- MLOAD = 0x53
- MSTORE = 0x54
- MSTORE8 = 0x55
- SLOAD = 0x56
- SSTORE = 0x57
- JUMP = 0x58
- JUMPI = 0x59
- PC = 0x5a
- MSIZE = 0x5b
- GAS = 0x5c
-
- // 0x60 range
- PUSH1 = 0x60
- PUSH2 = 0x61
- PUSH3 = 0x62
- PUSH4 = 0x63
- PUSH5 = 0x64
- PUSH6 = 0x65
- PUSH7 = 0x66
- PUSH8 = 0x67
- PUSH9 = 0x68
- PUSH10 = 0x69
- PUSH11 = 0x6a
- PUSH12 = 0x6b
- PUSH13 = 0x6c
- PUSH14 = 0x6d
- PUSH15 = 0x6e
- PUSH16 = 0x6f
- PUSH17 = 0x70
- PUSH18 = 0x71
- PUSH19 = 0x72
- PUSH20 = 0x73
- PUSH21 = 0x74
- PUSH22 = 0x75
- PUSH23 = 0x76
- PUSH24 = 0x77
- PUSH25 = 0x78
- PUSH26 = 0x79
- PUSH27 = 0x7a
- PUSH28 = 0x7b
- PUSH29 = 0x7c
- PUSH30 = 0x7d
- PUSH31 = 0x7e
- PUSH32 = 0x7f
-
- DUP1 = 0x80
- DUP2 = 0x81
- DUP3 = 0x82
- DUP4 = 0x83
- DUP5 = 0x84
- DUP6 = 0x85
- DUP7 = 0x86
- DUP8 = 0x87
- DUP9 = 0x88
- DUP10 = 0x89
- DUP11 = 0x8a
- DUP12 = 0x8b
- DUP13 = 0x8c
- DUP14 = 0x8d
- DUP15 = 0x8e
- DUP16 = 0x8f
-
- SWAP1 = 0x90
- SWAP2 = 0x91
- SWAP3 = 0x92
- SWAP4 = 0x93
- SWAP5 = 0x94
- SWAP6 = 0x95
- SWAP7 = 0x96
- SWAP8 = 0x97
- SWAP9 = 0x98
- SWAP10 = 0x99
- SWAP11 = 0x9a
- SWAP12 = 0x9b
- SWAP13 = 0x9c
- SWAP14 = 0x9d
- SWAP15 = 0x9e
- SWAP16 = 0x9f
-
- // 0xf0 range - closures
- CREATE = 0xf0
- CALL = 0xf1
- RETURN = 0xf2
- CALLCODE = 0xf3
-
- // 0x70 range - other
- LOG = 0xfe // XXX Unofficial
- SUICIDE = 0xff
-)
-
-// Since the opcodes aren't all in order we can't use a regular slice
-var opCodeToString = map[OpCode]string{
- // 0x0 range - arithmetic ops
- STOP: "STOP",
- ADD: "ADD",
- MUL: "MUL",
- SUB: "SUB",
- DIV: "DIV",
- SDIV: "SDIV",
- MOD: "MOD",
- SMOD: "SMOD",
- EXP: "EXP",
- BNOT: "BNOT",
- LT: "LT",
- GT: "GT",
- SLT: "SLT",
- SGT: "SGT",
- EQ: "EQ",
- NOT: "NOT",
-
- // 0x10 range - bit ops
- AND: "AND",
- OR: "OR",
- XOR: "XOR",
- BYTE: "BYTE",
- ADDMOD: "ADDMOD",
- MULMOD: "MULMOD",
-
- // 0x20 range - crypto
- SHA3: "SHA3",
-
- // 0x30 range - closure state
- ADDRESS: "ADDRESS",
- BALANCE: "BALANCE",
- ORIGIN: "ORIGIN",
- CALLER: "CALLER",
- CALLVALUE: "CALLVALUE",
- CALLDATALOAD: "CALLDATALOAD",
- CALLDATASIZE: "CALLDATASIZE",
- CALLDATACOPY: "CALLDATACOPY",
- CODESIZE: "CODESIZE",
- CODECOPY: "CODECOPY",
- GASPRICE: "TXGASPRICE",
-
- // 0x40 range - block operations
- PREVHASH: "PREVHASH",
- COINBASE: "COINBASE",
- TIMESTAMP: "TIMESTAMP",
- NUMBER: "NUMBER",
- DIFFICULTY: "DIFFICULTY",
- GASLIMIT: "GASLIMIT",
- EXTCODESIZE: "EXTCODESIZE",
- EXTCODECOPY: "EXTCODECOPY",
-
- // 0x50 range - 'storage' and execution
- POP: "POP",
- //DUP: "DUP",
- //SWAP: "SWAP",
- MLOAD: "MLOAD",
- MSTORE: "MSTORE",
- MSTORE8: "MSTORE8",
- SLOAD: "SLOAD",
- SSTORE: "SSTORE",
- JUMP: "JUMP",
- JUMPI: "JUMPI",
- PC: "PC",
- MSIZE: "MSIZE",
- GAS: "GAS",
-
- // 0x60 range - push
- PUSH1: "PUSH1",
- PUSH2: "PUSH2",
- PUSH3: "PUSH3",
- PUSH4: "PUSH4",
- PUSH5: "PUSH5",
- PUSH6: "PUSH6",
- PUSH7: "PUSH7",
- PUSH8: "PUSH8",
- PUSH9: "PUSH9",
- PUSH10: "PUSH10",
- PUSH11: "PUSH11",
- PUSH12: "PUSH12",
- PUSH13: "PUSH13",
- PUSH14: "PUSH14",
- PUSH15: "PUSH15",
- PUSH16: "PUSH16",
- PUSH17: "PUSH17",
- PUSH18: "PUSH18",
- PUSH19: "PUSH19",
- PUSH20: "PUSH20",
- PUSH21: "PUSH21",
- PUSH22: "PUSH22",
- PUSH23: "PUSH23",
- PUSH24: "PUSH24",
- PUSH25: "PUSH25",
- PUSH26: "PUSH26",
- PUSH27: "PUSH27",
- PUSH28: "PUSH28",
- PUSH29: "PUSH29",
- PUSH30: "PUSH30",
- PUSH31: "PUSH31",
- PUSH32: "PUSH32",
-
- DUP1: "DUP1",
- DUP2: "DUP2",
- DUP3: "DUP3",
- DUP4: "DUP4",
- DUP5: "DUP5",
- DUP6: "DUP6",
- DUP7: "DUP7",
- DUP8: "DUP8",
- DUP9: "DUP9",
- DUP10: "DUP10",
- DUP11: "DUP11",
- DUP12: "DUP12",
- DUP13: "DUP13",
- DUP14: "DUP14",
- DUP15: "DUP15",
- DUP16: "DUP16",
-
- SWAP1: "SWAP1",
- SWAP2: "SWAP2",
- SWAP3: "SWAP3",
- SWAP4: "SWAP4",
- SWAP5: "SWAP5",
- SWAP6: "SWAP6",
- SWAP7: "SWAP7",
- SWAP8: "SWAP8",
- SWAP9: "SWAP9",
- SWAP10: "SWAP10",
- SWAP11: "SWAP11",
- SWAP12: "SWAP12",
- SWAP13: "SWAP13",
- SWAP14: "SWAP14",
- SWAP15: "SWAP15",
- SWAP16: "SWAP16",
-
- // 0xf0 range
- CREATE: "CREATE",
- CALL: "CALL",
- RETURN: "RETURN",
- CALLCODE: "CALLCODE",
-
- // 0x70 range - other
- LOG: "LOG",
- SUICIDE: "SUICIDE",
-}
-
-func (o OpCode) String() string {
- str := opCodeToString[o]
- if len(str) == 0 {
- return fmt.Sprintf("Missing opcode 0x%x", int(o))
- }
-
- return str
-}