diff --git a/documents/blockchain/v10/documents/block.rs b/documents/blockchain/v10/documents/block.rs
index 6d9dfb59742252016f3e3c3c6645f87e8bf35cc1..72db06e6797dbf0ae367f04569200456de257148 100644
--- a/documents/blockchain/v10/documents/block.rs
+++ b/documents/blockchain/v10/documents/block.rs
@@ -170,8 +170,12 @@ impl TxDocOrTxHash {
     /// lightening consists in transforming the document by its hash.
     pub fn reduce(&self) -> TxDocOrTxHash {
         if let TxDocOrTxHash::TxDoc(ref tx_doc) = self {
-            let mut tx_doc = tx_doc.deref().clone();
-            TxDocOrTxHash::TxHash(tx_doc.get_hash())
+            let tx_doc = tx_doc.deref();
+            if let Some(ref hash) = tx_doc.get_hash_opt() {
+                TxDocOrTxHash::TxHash(*hash)
+            } else {
+                TxDocOrTxHash::TxHash(tx_doc.clone().compute_hash())
+            }
         } else {
             self.clone()
         }
diff --git a/documents/blockchain/v10/documents/transaction.rs b/documents/blockchain/v10/documents/transaction.rs
index 94006b10d83835b2bff23022c92aeffeaa6d087c..e436508b6bfa097dfc650cf9a043d856db70c18b 100644
--- a/documents/blockchain/v10/documents/transaction.rs
+++ b/documents/blockchain/v10/documents/transaction.rs
@@ -508,6 +508,10 @@ impl TransactionDocument {
         self.hash = Some(Hash::from_hex(&sha256.result_str()).unwrap());
         self.hash.expect("Try to get hash of a reduce tx !")
     }
+    /// get transaction hash option
+    pub fn get_hash_opt(&self) -> Option<Hash> {
+        self.hash
+    }
     /// Get transaction hash
     pub fn get_hash(&mut self) -> Hash {
         if let Some(hash) = self.hash {