aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
diff options
context:
space:
mode:
Diffstat (limited to 'ethchain')
-rw-r--r--ethchain/stack.go1
-rw-r--r--ethchain/vm.go11
-rw-r--r--ethchain/vm_test.go5
3 files changed, 14 insertions, 3 deletions
diff --git a/ethchain/stack.go b/ethchain/stack.go
index e3fc4b684..0dadd15e5 100644
--- a/ethchain/stack.go
+++ b/ethchain/stack.go
@@ -55,6 +55,7 @@ const (
// 0x50 range - 'storage' and execution
oPUSH = 0x50
+ oPUSH20 = 0x80
oPOP = 0x51
oDUP = 0x52
oSWAP = 0x53
diff --git a/ethchain/vm.go b/ethchain/vm.go
index f94425d2d..dd99ee790 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -301,7 +301,6 @@ func (vm *Vm) RunClosure(closure *Closure) []byte {
// 0x50 range
case oPUSH: // Push PC+1 on to the stack
pc.Add(pc, ethutil.Big1)
- //val := closure.GetMem(pc).BigInt()
data := closure.Gets(pc, big.NewInt(32))
val := ethutil.BigD(data.Bytes())
@@ -309,6 +308,16 @@ func (vm *Vm) RunClosure(closure *Closure) []byte {
stack.Push(val)
pc.Add(pc, big.NewInt(31))
+ case oPUSH20:
+ pc.Add(pc, ethutil.Big1)
+ data := closure.Gets(pc, big.NewInt(20))
+ val := ethutil.BigD(data.Bytes())
+
+ // Push value to stack
+ stack.Push(val)
+
+ pc.Add(pc, big.NewInt(19))
+
case oPOP:
stack.Pop()
case oDUP:
diff --git a/ethchain/vm_test.go b/ethchain/vm_test.go
index dc74422cc..923d3526c 100644
--- a/ethchain/vm_test.go
+++ b/ethchain/vm_test.go
@@ -114,12 +114,13 @@ func TestRun4(t *testing.T) {
int8 ret = 0
int8 arg = 10
- call(938726394128221156290138488023434115948430767407, 0, 100000000, arg, ret)
+ addr address = "a46df28529eb8aa8b8c025b0b413c5f4b688352f"
+ call(address, 0, 100000000, arg, ret)
`), false)
if err != nil {
fmt.Println(err)
}
- asm = append(asm, "LOG")
+ //asm = append(asm, "LOG")
fmt.Println(asm)
callerScript := ethutil.Assemble(asm...)