diff --git a/ethereum/javascript_runtime.go b/ethereum/javascript_runtime.go
index 92d9c119fa673d56b8447e27d7d94e233e834f18..a9b12629abd1b9ad085192124f856407b17c7833 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 e66bb2612a6fb33b54d9fd7a913057493c46ee98..368f2381e75c4f52e8c3103c084217bd1d02758a 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
+
+}