From f5a71375be73f66a7df849dbfa00205984853d96 Mon Sep 17 00:00:00 2001 From: peilun-conflux <48905552+peilun-conflux@users.noreply.github.com> Date: Mon, 15 Apr 2024 10:44:18 +0800 Subject: [PATCH] Allow reverting the last tx with no flow data update. (#51) * Allow reverting the last tx with no flow data update. * Add details for panic. --- common/append_merkle/src/lib.rs | 5 ++++- node/storage/src/log_store/log_manager.rs | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/common/append_merkle/src/lib.rs b/common/append_merkle/src/lib.rs index d206239..382f25c 100644 --- a/common/append_merkle/src/lib.rs +++ b/common/append_merkle/src/lib.rs @@ -188,7 +188,10 @@ impl> AppendMerkleTree { self.layers[0][index] = leaf; self.recompute_after_fill_leaves(index, index + 1); } else if self.layers[0][index] != leaf { - panic!("Fill with invalid leaf") + panic!( + "Fill with invalid leaf, index={} was={:?} get={:?}", + index, self.layers[0][index], leaf + ); } } diff --git a/node/storage/src/log_store/log_manager.rs b/node/storage/src/log_store/log_manager.rs index 0eabe8e..b4512e9 100644 --- a/node/storage/src/log_store/log_manager.rs +++ b/node/storage/src/log_store/log_manager.rs @@ -535,12 +535,19 @@ impl LogManager { + previous_tx.num_entries() as u64) / PORA_CHUNK_SIZE as u64) as usize; - assert!(current_len > expected_len); - while let Some((subtree_depth, _)) = initial_data.subtree_list.pop() { - current_len -= 1 << (subtree_depth - 1); - if current_len == expected_len { - break; + if current_len > expected_len { + while let Some((subtree_depth, _)) = initial_data.subtree_list.pop() + { + current_len -= 1 << (subtree_depth - 1); + if current_len == expected_len { + break; + } } + } else { + warn!( + "revert last tx with no-op: {} {}", + current_len, expected_len + ); } assert_eq!(current_len, expected_len); while let Some((index, h)) = initial_data.known_leaves.pop() {