From 863785a52046bcfbbcaa57c83b4b43c215368760 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Thu, 18 Sep 2014 16:48:42 +0200
Subject: [PATCH] Updated opcodes

---
 ethchain/types.go | 244 ++++++++++++++++++++--------------------------
 1 file changed, 106 insertions(+), 138 deletions(-)

diff --git a/ethchain/types.go b/ethchain/types.go
index 9e7269f74..45486b06c 100644
--- a/ethchain/types.go
+++ b/ethchain/types.go
@@ -27,10 +27,12 @@ const (
 	NOT  = 0x0f
 
 	// 0x10 range - bit ops
-	AND  = 0x10
-	OR   = 0x11
-	XOR  = 0x12
-	BYTE = 0x13
+	AND    = 0x10
+	OR     = 0x11
+	XOR    = 0x12
+	BYTE   = 0x13
+	ADDMOD = 0x14
+	MULMOD = 0x15
 
 	// 0x20 range - crypto
 	SHA3 = 0x20
@@ -47,6 +49,8 @@ const (
 	CODESIZE     = 0x38
 	CODECOPY     = 0x39
 	GASPRICE     = 0x3a
+	EXTCODECOPY  = 0x3b
+	EXTCODESIZE  = 0x3c
 
 	// 0x40 range - block operations
 	PREVHASH   = 0x40
@@ -57,9 +61,9 @@ const (
 	GASLIMIT   = 0x45
 
 	// 0x50 range - 'storage' and execution
-	POP     = 0x50
-	DUP     = 0x51
-	SWAP    = 0x52
+	POP = 0x50
+	//DUP     = 0x51
+	//SWAP    = 0x52
 	MLOAD   = 0x53
 	MSTORE  = 0x54
 	MSTORE8 = 0x55
@@ -105,10 +109,46 @@ const (
 	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
+	CREATE        = 0xf0
+	CALL          = 0xf1
+	RETURN        = 0xf2
+	POST          = 0xf3
+	CALLSTATELESS = 0xf4
 
 	// 0x70 range - other
 	LOG     = 0xfe // XXX Unofficial
@@ -136,10 +176,12 @@ var opCodeToString = map[OpCode]string{
 	NOT:  "NOT",
 
 	// 0x10 range - bit ops
-	AND:  "AND",
-	OR:   "OR",
-	XOR:  "XOR",
-	BYTE: "BYTE",
+	AND:    "AND",
+	OR:     "OR",
+	XOR:    "XOR",
+	BYTE:   "BYTE",
+	ADDMOD: "ADDMOD",
+	MULMOD: "MULMOD",
 
 	// 0x20 range - crypto
 	SHA3: "SHA3",
@@ -158,17 +200,19 @@ var opCodeToString = map[OpCode]string{
 	GASPRICE:     "TXGASPRICE",
 
 	// 0x40 range - block operations
-	PREVHASH:   "PREVHASH",
-	COINBASE:   "COINBASE",
-	TIMESTAMP:  "TIMESTAMP",
-	NUMBER:     "NUMBER",
-	DIFFICULTY: "DIFFICULTY",
-	GASLIMIT:   "GASLIMIT",
+	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",
+	POP: "POP",
+	//DUP:     "DUP",
+	//SWAP:    "SWAP",
 	MLOAD:   "MLOAD",
 	MSTORE:  "MSTORE",
 	MSTORE8: "MSTORE8",
@@ -214,10 +258,46 @@ var opCodeToString = map[OpCode]string{
 	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",
+	CREATE:        "CREATE",
+	CALL:          "CALL",
+	RETURN:        "RETURN",
+	POST:          "POST",
+	CALLSTATELESS: "CALLSTATELESS",
 
 	// 0x70 range - other
 	LOG:     "LOG",
@@ -232,115 +312,3 @@ func (o OpCode) String() string {
 
 	return str
 }
-
-// Op codes for assembling
-var OpCodes = map[string]byte{
-	// 0x0 range - arithmetic ops
-	"STOP": 0x00,
-	"ADD":  0x01,
-	"MUL":  0x02,
-	"SUB":  0x03,
-	"DIV":  0x04,
-	"SDIV": 0x05,
-	"MOD":  0x06,
-	"SMOD": 0x07,
-	"EXP":  0x08,
-	"NEG":  0x09,
-	"LT":   0x0a,
-	"GT":   0x0b,
-	"EQ":   0x0c,
-	"NOT":  0x0d,
-
-	// 0x10 range - bit ops
-	"AND":  0x10,
-	"OR":   0x11,
-	"XOR":  0x12,
-	"BYTE": 0x13,
-
-	// 0x20 range - crypto
-	"SHA3": 0x20,
-
-	// 0x30 range - closure state
-	"ADDRESS":      0x30,
-	"BALANCE":      0x31,
-	"ORIGIN":       0x32,
-	"CALLER":       0x33,
-	"CALLVALUE":    0x34,
-	"CALLDATALOAD": 0x35,
-	"CALLDATASIZE": 0x36,
-	"GASPRICE":     0x38,
-
-	// 0x40 range - block operations
-	"PREVHASH":   0x40,
-	"COINBASE":   0x41,
-	"TIMESTAMP":  0x42,
-	"NUMBER":     0x43,
-	"DIFFICULTY": 0x44,
-	"GASLIMIT":   0x45,
-
-	// 0x50 range - 'storage' and execution
-	"POP":     0x51,
-	"DUP":     0x52,
-	"SWAP":    0x53,
-	"MLOAD":   0x54,
-	"MSTORE":  0x55,
-	"MSTORE8": 0x56,
-	"SLOAD":   0x57,
-	"SSTORE":  0x58,
-	"JUMP":    0x59,
-	"JUMPI":   0x5a,
-	"PC":      0x5b,
-	"MSIZE":   0x5c,
-
-	// 0x70 range - 'push'
-	"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": 0x70,
-	"PUSH27": 0x7a,
-	"PUSH28": 0x7b,
-	"PUSH29": 0x7c,
-	"PUSH30": 0x7d,
-	"PUSH31": 0x7e,
-	"PUSH32": 0x7f,
-
-	// 0xf0 range - closures
-	"CREATE": 0xf0,
-	"CALL":   0xf1,
-	"RETURN": 0xf2,
-
-	// 0x70 range - other
-	"LOG":     0xfe,
-	"SUICIDE": 0x7f,
-}
-
-func IsOpCode(s string) bool {
-	for key, _ := range OpCodes {
-		if key == s {
-			return true
-		}
-	}
-	return false
-}
-- 
GitLab