From 0c6b41f4c9edf33cf36b5e044b62e29161d50b07 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Fri, 20 Jun 2014 01:10:20 +0200
Subject: [PATCH] CALLDATACOPY

---
 ethchain/vm.go | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/ethchain/vm.go b/ethchain/vm.go
index fc3c37dc1..b9e8353fb 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -433,9 +433,28 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
 
 			vm.Printf(" => %d", l)
 		case CALLDATACOPY:
-			panic("not implemented")
+			var (
+				size = int64(len(closure.Args))
+				mOff = stack.Pop().Int64()
+				cOff = stack.Pop().Int64()
+				l    = stack.Pop().Int64()
+			)
+
+			if cOff > size {
+				cOff = 0
+				l = 0
+			} else if cOff+l > size {
+				l = 0
+			}
+
+			code := closure.Args[cOff : cOff+l]
+
+			mem.Set(mOff, l, code)
 		case CODESIZE:
-			stack.Push(big.NewInt(int64(len(closure.Script))))
+			l := big.NewInt(int64(len(closure.Script)))
+			stack.Push(l)
+
+			vm.Printf(" => %d", l)
 		case CODECOPY:
 			var (
 				size = int64(len(closure.Script))
-- 
GitLab