From 1e965cb8f5c63d73a5aac1556a2638345ba2824c Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Wed, 25 Jun 2014 09:47:11 +0200
Subject: [PATCH] Moved BlockDo to utils

---
 ethereum/javascript_runtime.go |  2 +-
 utils/cmd.go                   | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/ethereum/javascript_runtime.go b/ethereum/javascript_runtime.go
index 92d9c119f..a9b12629a 100644
--- a/ethereum/javascript_runtime.go
+++ b/ethereum/javascript_runtime.go
@@ -215,7 +215,7 @@ func (self *JSRE) execBlock(call otto.FunctionCall) otto.Value {
 		return otto.UndefinedValue()
 	}
 
-	err = self.ethereum.BlockDo(ethutil.FromHex(hash))
+	err = utils.BlockDo(self.ethereum, ethutil.FromHex(hash))
 	if err != nil {
 		fmt.Println(err)
 		return otto.FalseValue()
diff --git a/utils/cmd.go b/utils/cmd.go
index e66bb2612..368f2381e 100644
--- a/utils/cmd.go
+++ b/utils/cmd.go
@@ -1,6 +1,7 @@
 package utils
 
 import (
+	"fmt"
 	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethminer"
 	"github.com/ethereum/eth-go/ethpub"
@@ -74,3 +75,21 @@ func StartMining(ethereum *eth.Ethereum) bool {
 
 	return false
 }
+
+// Replay block
+func BlockDo(ethereum *eth.Ethereum, hash []byte) error {
+	block := ethereum.BlockChain().GetBlock(hash)
+	if block == nil {
+		return fmt.Errorf("unknown block %x", hash)
+	}
+
+	parent := ethereum.BlockChain().GetBlock(block.PrevHash)
+
+	_, err := ethereum.StateManager().ApplyDiff(parent.State(), parent, block)
+	if err != nil {
+		return err
+	}
+
+	return nil
+
+}
-- 
GitLab