From 00348756bce00c2d19f16ce8df5eff7a62f5cfc6 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 12 Jan 2015 13:49:47 +0100
Subject: updated tests

---
 tests/files/StateTests/stSystemOperationsTest.json | 48 ++++++++++++++++------
 tests/files/VMTests/RandomTests/201501091727.json  | 31 --------------
 tests/files/VMTests/RandomTests/201501091831.json  | 46 +++++++++++++++++++++
 .../files/VMTests/RandomTests/201501110744GO.json  | 46 +++++++++++++++++++++
 .../files/VMTests/RandomTests/201501120415GO.json  | 46 +++++++++++++++++++++
 .../VMTests/RandomTests/201501120933PYTHON.json    | 31 ++++++++++++++
 tests/helper/vm.go                                 |  2 +-
 vm/context.go                                      |  7 ++++
 vm/vm_debug.go                                     | 13 +-----
 9 files changed, 215 insertions(+), 55 deletions(-)
 delete mode 100644 tests/files/VMTests/RandomTests/201501091727.json
 create mode 100644 tests/files/VMTests/RandomTests/201501091831.json
 create mode 100644 tests/files/VMTests/RandomTests/201501110744GO.json
 create mode 100644 tests/files/VMTests/RandomTests/201501120415GO.json
 create mode 100644 tests/files/VMTests/RandomTests/201501120933PYTHON.json

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/201501091727.json b/tests/files/VMTests/RandomTests/201501091727.json
deleted file mode 100644
index 619ce4a3d..000000000
--- a/tests/files/VMTests/RandomTests/201501091727.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-    "randomVMtest" : {
-        "env" : {
-            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
-            "currentDifficulty" : "256",
-            "currentGasLimit" : "1000000",
-            "currentNumber" : "0",
-            "currentTimestamp" : "1",
-            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
-        },
-        "exec" : {
-            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
-            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
-            "code" : "0x583438f0",
-            "data" : "0x",
-            "gas" : "10000",
-            "gasPrice" : "100000000000000",
-            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
-            "value" : "1000000000000000000"
-        },
-        "pre" : {
-            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
-                "balance" : "1000000000000000000",
-                "code" : "0x583438f0",
-                "nonce" : "0",
-                "storage" : {
-                }
-            }
-        }
-    }
-}
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/201501120933PYTHON.json b/tests/files/VMTests/RandomTests/201501120933PYTHON.json
new file mode 100644
index 000000000..04d232ba3
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501120933PYTHON.json
@@ -0,0 +1,31 @@
+{
+    "randomVMtest" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6303376d4056f107",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "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)
 
-- 
cgit v1.2.3