aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-01-12 23:13:30 +0800
committerobscuren <geffobscura@gmail.com>2015-01-12 23:13:30 +0800
commit8a1b51c716abdc21a8af43282e106d77eda3706b (patch)
tree27ba3d93e330f7dfb51fcc0f8fc1959e7b7f1c09
parent75cd9cd2de315f8680ff6a382e9b3bd48e17ecad (diff)
downloaddexon-8a1b51c716abdc21a8af43282e106d77eda3706b.tar
dexon-8a1b51c716abdc21a8af43282e106d77eda3706b.tar.gz
dexon-8a1b51c716abdc21a8af43282e106d77eda3706b.tar.bz2
dexon-8a1b51c716abdc21a8af43282e106d77eda3706b.tar.lz
dexon-8a1b51c716abdc21a8af43282e106d77eda3706b.tar.xz
dexon-8a1b51c716abdc21a8af43282e106d77eda3706b.tar.zst
dexon-8a1b51c716abdc21a8af43282e106d77eda3706b.zip
updated tests
-rw-r--r--tests/files/VMTests/RandomTests/201501121323MULMOD_GO.json54
-rw-r--r--tests/files/VMTests/RandomTests/201501121328MULMOD_GO.json47
-rw-r--r--tests/files/VMTests/RandomTests/201501121329MULMODGO.json47
-rw-r--r--tests/files/VMTests/RandomTests/201501121402CALL_GO.json53
-rw-r--r--tests/files/VMTests/RandomTests/201501121408ADDMOD_GO.json47
-rw-r--r--tests/files/VMTests/RandomTests/201501121416ADDMOD_GO.json47
-rw-r--r--vm/vm_debug.go40
7 files changed, 317 insertions, 18 deletions
diff --git a/tests/files/VMTests/RandomTests/201501121323MULMOD_GO.json b/tests/files/VMTests/RandomTests/201501121323MULMOD_GO.json
new file mode 100644
index 000000000..1daf701e0
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501121323MULMOD_GO.json
@@ -0,0 +1,54 @@
+{
+ "randomVMtest" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "0",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "code" : "0x414341424443850659a055450955",
+ "data" : "0x",
+ "gas" : "10000",
+ "gasPrice" : "100000000000000",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "1000000000000000000"
+ },
+ "gas" : "0",
+ "logs" : [
+ {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+ "data" : "0x",
+ "topics" : [
+ ]
+ }
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x414341424443850659a055450955",
+ "nonce" : "0",
+ "storage" : {
+ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0x02"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x414341424443850659a055450955",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ }
+ }
+}
diff --git a/tests/files/VMTests/RandomTests/201501121328MULMOD_GO.json b/tests/files/VMTests/RandomTests/201501121328MULMOD_GO.json
new file mode 100644
index 000000000..fd03ec48f
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501121328MULMOD_GO.json
@@ -0,0 +1,47 @@
+{
+ "randomVMtest" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "0",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "code" : "0x424341434541904255151409a29a9c55",
+ "data" : "0x",
+ "gas" : "10000",
+ "gasPrice" : "100000000000000",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "1000000000000000000"
+ },
+ "gas" : "0",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x424341434541904255151409a29a9c55",
+ "nonce" : "0",
+ "storage" : {
+ "0x02" : "0x0f4240"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x424341434541904255151409a29a9c55",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ }
+ }
+}
diff --git a/tests/files/VMTests/RandomTests/201501121329MULMODGO.json b/tests/files/VMTests/RandomTests/201501121329MULMODGO.json
new file mode 100644
index 000000000..755fb5925
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501121329MULMODGO.json
@@ -0,0 +1,47 @@
+{
+ "randomVMtest" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "0",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "code" : "0x444443424444554380330955",
+ "data" : "0x",
+ "gas" : "10000",
+ "gasPrice" : "100000000000000",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "1000000000000000000"
+ },
+ "gas" : "0",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x444443424444554380330955",
+ "nonce" : "0",
+ "storage" : {
+ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x444443424444554380330955",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ }
+ }
+}
diff --git a/tests/files/VMTests/RandomTests/201501121402CALL_GO.json b/tests/files/VMTests/RandomTests/201501121402CALL_GO.json
new file mode 100644
index 000000000..6a847d261
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501121402CALL_GO.json
@@ -0,0 +1,53 @@
+{
+ "randomVMtest" : {
+ "callcreates" : [
+ {
+ "data" : "0x0000",
+ "destination" : "0000000000000000000000000000000000000002",
+ "gasLimit" : "0",
+ "value" : "0"
+ }
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "0",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "code" : "0x4243434242434243f14555",
+ "data" : "0x",
+ "gas" : "10000",
+ "gasPrice" : "100000000000000",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "1000000000000000000"
+ },
+ "gas" : "9670",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x4243434242434243f14555",
+ "nonce" : "0",
+ "storage" : {
+ "0x0f4240" : "0x01"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x4243434242434243f14555",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ }
+ }
+}
diff --git a/tests/files/VMTests/RandomTests/201501121408ADDMOD_GO.json b/tests/files/VMTests/RandomTests/201501121408ADDMOD_GO.json
new file mode 100644
index 000000000..026a513af
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501121408ADDMOD_GO.json
@@ -0,0 +1,47 @@
+{
+ "randomVMtest" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "0",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "code" : "0x4241455544414443385908069c9e8955",
+ "data" : "0x",
+ "gas" : "10000",
+ "gasPrice" : "100000000000000",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "1000000000000000000"
+ },
+ "gas" : "0",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x4241455544414443385908069c9e8955",
+ "nonce" : "0",
+ "storage" : {
+ "0x0f4240" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x4241455544414443385908069c9e8955",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ }
+ }
+}
diff --git a/tests/files/VMTests/RandomTests/201501121416ADDMOD_GO.json b/tests/files/VMTests/RandomTests/201501121416ADDMOD_GO.json
new file mode 100644
index 000000000..8f11540d2
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/201501121416ADDMOD_GO.json
@@ -0,0 +1,47 @@
+{
+ "randomVMtest" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "currentGasLimit" : "1000000",
+ "currentNumber" : "0",
+ "currentTimestamp" : "2",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "code" : "0x4341434543454542559313088e55",
+ "data" : "0x",
+ "gas" : "10000",
+ "gasPrice" : "100000000000000",
+ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+ "value" : "1000000000000000000"
+ },
+ "gas" : "0",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x4341434543454542559313088e55",
+ "nonce" : "0",
+ "storage" : {
+ "0x02" : "0x0f4240"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "1000000000000000000",
+ "code" : "0x4341434543454542559313088e55",
+ "nonce" : "0",
+ "storage" : {
+ }
+ }
+ }
+ }
+}
diff --git a/vm/vm_debug.go b/vm/vm_debug.go
index fee42d3d8..81db45f19 100644
--- a/vm/vm_debug.go
+++ b/vm/vm_debug.go
@@ -48,6 +48,12 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
})
context := NewContext(caller, me, code, gas, price)
+ vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], context.Address(), len(code), context.Gas, callData)
+
+ if p := Precompiled[string(me.Address())]; p != nil {
+ return self.RunPrecompiled(p, callData, context)
+ }
+
if self.Recoverable {
// Recover from any require exception
defer func() {
@@ -64,10 +70,6 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
}()
}
- if p := Precompiled[string(me.Address())]; p != nil {
- return self.RunPrecompiled(p, callData, context)
- }
-
var (
op OpCode
@@ -94,8 +96,6 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
}
)
- vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], context.Address(), len(code), context.Gas, callData)
-
// Don't bother with the execution if there's no code.
if len(code) == 0 {
return context.Return(nil), nil
@@ -368,12 +368,14 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
y := stack.Pop()
z := stack.Pop()
- base.Add(x, y)
- base.Mod(base, z)
+ add := new(big.Int).Add(x, y)
+ if len(z.Bytes()) > 0 { // NOT 0x0
+ base.Mod(add, z)
- U256(base)
+ U256(base)
+ }
- self.Printf(" = %v", base)
+ self.Printf(" %v + %v %% %v = %v", x, y, z, base)
stack.Push(base)
case MULMOD:
@@ -382,12 +384,14 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
y := stack.Pop()
z := stack.Pop()
- base.Mul(x, y)
- base.Mod(base, z)
+ mul := new(big.Int).Mul(x, y)
+ if len(z.Bytes()) > 0 { // NOT 0x0
+ base.Mod(mul, z)
- U256(base)
+ U256(base)
+ }
- self.Printf(" = %v", base)
+ self.Printf(" %v + %v %% %v = %v", x, y, z, base)
stack.Push(base)
@@ -541,6 +545,8 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
self.Printf(" => 0x%x", difficulty.Bytes())
case GASLIMIT:
+ self.Printf(" => %v", self.env.GasLimit())
+
stack.Push(self.env.GasLimit())
// 0x50 range
@@ -933,13 +939,11 @@ func (self *DebugVm) RunPrecompiled(p *PrecompiledAccount, callData []byte, cont
return context.Return(ret), nil
} else {
- self.Endl()
+ self.Printf("NATIVE_FUNC => failed").Endl()
tmp := new(big.Int).Set(context.Gas)
- context.UseGas(context.Gas)
-
- return context.Return(nil), OOG(gas, tmp)
+ panic(OOG(gas, tmp).Error())
}
}