diff --git a/tests/files/StateTests/stSystemOperationsTest.json b/tests/files/StateTests/stSystemOperationsTest.json index 4989c10f9..d519d375d 100644 --- a/tests/files/StateTests/stSystemOperationsTest.json +++ b/tests/files/StateTests/stSystemOperationsTest.json @@ -6384,25 +6384,33 @@ "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "1000000000000100000", + "balance" : "1000000000000099977", "code" : "0x7c601080600c6000396000f3006000355415600957005b60203560003555600052600060036017f0600055", - "nonce" : "0", + "nonce" : "1", "storage" : { + "0x" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "10000", + "balance" : "908", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999890000", + "balance" : "999999999999899092", "code" : "0x", "nonce" : "1", "storage" : { } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "23", + "code" : "0x", + "nonce" : "0", + "storage" : { + } } }, "pre" : { @@ -6445,25 +6453,33 @@ "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "1000000000000100000", + "balance" : "1000000000000099977", "code" : "0x7c601080600c6000396000f3006000355415600957005b6020356000355560005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6017f0600055", - "nonce" : "0", + "nonce" : "1", "storage" : { + "0x" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "10000", + "balance" : "908", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999890000", + "balance" : "999999999999899092", "code" : "0x", "nonce" : "1", "storage" : { } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "23", + "code" : "0x", + "nonce" : "0", + "storage" : { + } } }, "pre" : { @@ -6506,25 +6522,33 @@ "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { - "balance" : "1000000000000100000", + "balance" : "1000000000000099977", "code" : "0x7c601080600c6000396000f3006000355415600957005b60203560003555600052600060006017f0600055", - "nonce" : "0", + "nonce" : "1", "storage" : { + "0x" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "10000", + "balance" : "908", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999890000", + "balance" : "999999999999899092", "code" : "0x", "nonce" : "1", "storage" : { } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "23", + "code" : "0x", + "nonce" : "0", + "storage" : { + } } }, "pre" : { diff --git a/tests/files/VMTests/RandomTests/201501091831.json b/tests/files/VMTests/RandomTests/201501091831.json new file mode 100644 index 000000000..75906c8d6 --- /dev/null +++ b/tests/files/VMTests/RandomTests/201501091831.json @@ -0,0 +1,46 @@ +{ + "randomVMtest" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x596b0768335591598873a0325111f337", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9997", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x596b0768335591598873a0325111f337", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x596b0768335591598873a0325111f337", + "nonce" : "0", + "storage" : { + } + } + } + } +} diff --git a/tests/files/VMTests/RandomTests/201501110744GO.json b/tests/files/VMTests/RandomTests/201501110744GO.json new file mode 100644 index 000000000..83b0a1dc9 --- /dev/null +++ b/tests/files/VMTests/RandomTests/201501110744GO.json @@ -0,0 +1,46 @@ +{ + "randomVMtest" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x3858423938447a730a049901951a0a1a", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9991", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x3858423938447a730a049901951a0a1a", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x3858423938447a730a049901951a0a1a", + "nonce" : "0", + "storage" : { + } + } + } + } +} diff --git a/tests/files/VMTests/RandomTests/201501120415GO.json b/tests/files/VMTests/RandomTests/201501120415GO.json new file mode 100644 index 000000000..eabfba179 --- /dev/null +++ b/tests/files/VMTests/RandomTests/201501120415GO.json @@ -0,0 +1,46 @@ +{ + "randomVMtest" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x619f9a423639", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "7442", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x619f9a423639", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x619f9a423639", + "nonce" : "0", + "storage" : { + } + } + } + } +} diff --git a/tests/files/VMTests/RandomTests/201501091727.json b/tests/files/VMTests/RandomTests/201501120933PYTHON.json similarity index 91% rename from tests/files/VMTests/RandomTests/201501091727.json rename to tests/files/VMTests/RandomTests/201501120933PYTHON.json index 619ce4a3d..04d232ba3 100644 --- a/tests/files/VMTests/RandomTests/201501091727.json +++ b/tests/files/VMTests/RandomTests/201501120933PYTHON.json @@ -11,7 +11,7 @@ "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", - "code" : "0x583438f0", + "code" : "0x6303376d4056f107", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", @@ -21,7 +21,7 @@ "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", - "code" : "0x583438f0", + "code" : "0x6303376d4056f107", "nonce" : "0", "storage" : { } diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 123003faa..dac279753 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -58,7 +58,7 @@ func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) State() *state.StateDB { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } func (self *Env) GetHash(n uint64) []byte { - return nil + return crypto.Sha3([]byte(big.NewInt(int64(n)).String())) } func (self *Env) AddLog(log state.Log) { self.logs = append(self.logs, log) diff --git a/vm/context.go b/vm/context.go index d14df1aa7..b48f1a657 100644 --- a/vm/context.go +++ b/vm/context.go @@ -61,6 +61,13 @@ func (c *Context) GetRangeValue(x, size uint64) []byte { return ethutil.LeftPadBytes(c.Code[x:y], int(size)) } +func (c *Context) GetCode(x, size uint64) []byte { + x = uint64(math.Min(float64(x), float64(len(c.Code)))) + y := uint64(math.Min(float64(x+size), float64(len(c.Code)))) + + return ethutil.RightPadBytes(c.Code[x:y], int(size)) +} + func (c *Context) Return(ret []byte) []byte { // Return the remaining gas to the caller c.caller.ReturnGas(c.Gas, c.Price) diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 04ba8190d..eec8c518f 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -2,7 +2,6 @@ package vm import ( "fmt" - "math" "math/big" "github.com/ethereum/go-ethereum/crypto" @@ -491,21 +490,13 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price * } else { code = context.Code } - + context := NewContext(nil, nil, code, ethutil.Big0, ethutil.Big0) var ( - size = uint64(len(code)) mOff = stack.Pop().Uint64() cOff = stack.Pop().Uint64() l = stack.Pop().Uint64() ) - - if cOff > size { - cOff = 0 - l = 0 - } else if cOff+l > size { - l = uint64(math.Min(float64(cOff+l), float64(size))) - } - codeCopy := code[cOff : cOff+l] + codeCopy := context.GetCode(cOff, l) mem.Set(mOff, l, codeCopy)