aboutsummaryrefslogtreecommitdiffstats
path: root/ethutil/parsing.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-02-21 19:36:41 +0800
committerobscuren <geffobscura@gmail.com>2014-02-21 19:36:41 +0800
commitb20c0b1d59f4109c49c7351ddeecbe195912da38 (patch)
tree5ab889246d51a1eed7e2c2a057e2de3b3499b3f2 /ethutil/parsing.go
parentf2a1260294b25a31452fd00fe59820467f5cd86a (diff)
downloadgo-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.tar
go-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.tar.gz
go-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.tar.bz2
go-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.tar.lz
go-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.tar.xz
go-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.tar.zst
go-tangerine-b20c0b1d59f4109c49c7351ddeecbe195912da38.zip
Removed all old code
Diffstat (limited to 'ethutil/parsing.go')
-rw-r--r--ethutil/parsing.go141
1 files changed, 67 insertions, 74 deletions
diff --git a/ethutil/parsing.go b/ethutil/parsing.go
index 2c41fb4df..b43dac064 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)