diff --git a/core/types/block.go b/core/types/block.go
index a4fb44040186ceef6fe8097291a22413cc33c592..cf2a7080efc7313c7efabfd205fb3ca268c1f484 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -301,6 +301,23 @@ func (self *Block) ParentHash() common.Hash {
 	}
 }
 
+func (self *Block) Copy() *Block {
+	block := NewBlock(self.ParentHash(), self.Coinbase(), self.Root(), self.Difficulty(), self.Nonce(), self.header.Extra)
+	block.header.Bloom = self.header.Bloom
+	block.header.TxHash = self.header.TxHash
+	block.transactions = self.transactions
+	block.header.UncleHash = self.header.UncleHash
+	block.uncles = self.uncles
+	block.header.GasLimit.Set(self.header.GasLimit)
+	block.header.GasUsed.Set(self.header.GasUsed)
+	block.header.ReceiptHash = self.header.ReceiptHash
+	block.header.Difficulty.Set(self.header.Difficulty)
+	block.header.Number = self.header.Number
+	block.header.Time = self.header.Time
+	block.header.MixDigest = self.header.MixDigest
+	return block
+}
+
 func (self *Block) String() string {
 	return fmt.Sprintf(`BLOCK(%x): Size: %v TD: %v {
 NoNonce: %x