aboutsummaryrefslogtreecommitdiffstats
path: root/chain
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-11-01 08:18:03 +0800
committerobscuren <geffobscura@gmail.com>2014-11-01 08:18:03 +0800
commit141d3caabbfbebbbecac455462a40b6056aa3821 (patch)
tree367b81236d56c9ec21d9d2e0e8b29e261a668f11 /chain
parent5af4ff985dc43b648bdc96394a3bd96d9658ae0a (diff)
downloadgo-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.tar
go-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.tar.gz
go-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.tar.bz2
go-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.tar.lz
go-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.tar.xz
go-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.tar.zst
go-tangerine-141d3caabbfbebbbecac455462a40b6056aa3821.zip
Re-org op codes
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
-}