From b20c0b1d59f4109c49c7351ddeecbe195912da38 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 21 Feb 2014 12:36:41 +0100 Subject: [PATCH] Removed all old code --- ethutil/parsing.go | 141 +++++++++++++++++++++------------------------ 1 file changed, 67 insertions(+), 74 deletions(-) diff --git a/ethutil/parsing.go b/ethutil/parsing.go index 2c41fb4df2..b43dac0648 100644 --- a/ethutil/parsing.go +++ b/ethutil/parsing.go @@ -1,95 +1,88 @@ package ethutil import ( - "errors" - "fmt" "math/big" "strconv" - "strings" ) // Op codes -var OpCodes = map[string]string{ - "STOP": "0", - "ADD": "1", - "MUL": "2", - "SUB": "3", - "DIV": "4", - "SDIV": "5", - "MOD": "6", - "SMOD": "7", - "EXP": "8", - "NEG": "9", - "LT": "10", - "LE": "11", - "GT": "12", - "GE": "13", - "EQ": "14", - "NOT": "15", - "MYADDRESS": "16", - "TXSENDER": "17", - - "PUSH": "48", - "POP": "49", - "LOAD": "54", +var OpCodes = map[string]byte{ + "STOP": 0, + "ADD": 1, + "MUL": 2, + "SUB": 3, + "DIV": 4, + "SDIV": 5, + "MOD": 6, + "SMOD": 7, + "EXP": 8, + "NEG": 9, + "LT": 10, + "LE": 11, + "GT": 12, + "GE": 13, + "EQ": 14, + "NOT": 15, + "MYADDRESS": 16, + "TXSENDER": 17, + "TXVALUE": 18, + "TXFEE": 19, + "TXDATAN": 20, + "TXDATA": 21, + "BLK_PREVHASH": 22, + "BLK_COINBASE": 23, + "BLK_TIMESTAMP": 24, + "BLK_NUMBER": 25, + "BLK_DIFFICULTY": 26, + "BASEFEE": 27, + "SHA256": 32, + "RIPEMD160": 33, + "ECMUL": 34, + "ECADD": 35, + "ECSIGN": 36, + "ECRECOVER": 37, + "ECVALID": 38, + "SHA3": 39, + "PUSH": 48, + "POP": 49, + "DUP": 50, + "SWAP": 51, + "MLOAD": 52, + "MSTORE": 53, + "SLOAD": 54, + "SSTORE": 55, + "JMP": 56, + "JMPI": 57, + "IND": 58, + "EXTRO": 59, + "BALANCE": 60, + "MKTX": 61, + "SUICIDE": 62, } -func CompileInstr(s string) (string, error) { - tokens := strings.Split(s, " ") - if OpCodes[tokens[0]] == "" { - return s, errors.New(fmt.Sprintf("OP not found: %s", tokens[0])) +func IsOpCode(s string) bool { + for key, _ := range OpCodes { + if key == s { + return true + } } + return false +} - code := OpCodes[tokens[0]] // Replace op codes with the proper numerical equivalent - op := new(big.Int) - op.SetString(code, 0) - - args := make([]*big.Int, 6) - for i, val := range tokens[1:len(tokens)] { - num := new(big.Int) - num.SetString(val, 0) - args[i] = num - } - - // Big int equation = op + x * 256 + y * 256**2 + z * 256**3 + a * 256**4 + b * 256**5 + c * 256**6 - base := new(big.Int) - x := new(big.Int) - y := new(big.Int) - z := new(big.Int) - a := new(big.Int) - b := new(big.Int) - c := new(big.Int) - - if args[0] != nil { - x.Mul(args[0], big.NewInt(256)) - } - if args[1] != nil { - y.Mul(args[1], BigPow(256, 2)) - } - if args[2] != nil { - z.Mul(args[2], BigPow(256, 3)) - } - if args[3] != nil { - a.Mul(args[3], BigPow(256, 4)) - } - if args[4] != nil { - b.Mul(args[4], BigPow(256, 5)) - } - if args[5] != nil { - c.Mul(args[5], BigPow(256, 6)) +func CompileInstr(s string) ([]byte, error) { + isOp := IsOpCode(s) + if isOp { + return []byte{OpCodes[s]}, nil } - base.Add(op, x) - base.Add(base, y) - base.Add(base, z) - base.Add(base, a) - base.Add(base, b) - base.Add(base, c) + num := new(big.Int) + num.SetString(s, 0) - return base.String(), nil + return num.Bytes(), nil } func Instr(instr string) (int, []string, error) { + base := new(big.Int) base.SetString(instr, 0)