Skip to content

Commit 29a8710

Browse files
Merge pull request #8 from yangby-cryptape/bugfix/update-multiple-headers
fix: mmr error when update multiple headers at once
2 parents de2a438 + e8f1cfb commit 29a8710

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

prover/src/dummy_service.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ impl DummyService {
5757

5858
let mut positions = Vec::new();
5959
let mut block_hash = core::Hash::all_zeros();
60-
let mut height = 0;
60+
let mut height = self.client.headers_mmr_root.max_height;
6161

6262
for header in &headers {
63-
height = self.client.headers_mmr_root.max_height + 1;
63+
height += 1;
6464

6565
let index = height - self.client.headers_mmr_root.min_height;
6666
let position = mmr::lib::leaf_index_to_pos(u64::from(index));

prover/src/tests/service.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{format, fs::File, io::Read as _};
1+
use std::{format, fs::File, io::Read as _, mem};
22

33
use bitcoin::consensus::serialize;
44
use ckb_bitcoin_spv_verifier::types::{core, packed, prelude::*};
@@ -47,6 +47,8 @@ fn test_spv_client(
4747

4848
// Update
4949
let mut old_client: packed::SpvClient = service.tip_client().pack();
50+
let mut headers = Vec::new();
51+
let mut headers_group_size = 1;
5052
for header_bin in header_bins_iter {
5153
let header: core::Header = utilities::decode_from_bin_file(&header_bin).unwrap();
5254
let height: u32 = header_bin
@@ -58,7 +60,18 @@ fn test_spv_client(
5860
.unwrap();
5961
log::trace!("process header-{height} from file {}", header_bin.display());
6062

61-
let update = service.update(vec![header]).unwrap();
63+
headers.push(header);
64+
if height + 1 != verify_tx_range.0 && headers.len() < headers_group_size {
65+
continue;
66+
}
67+
68+
log::trace!("process {} headers at one time", headers.len());
69+
let update = service.update(mem::take(&mut headers)).unwrap();
70+
if verify_tx_range.0 <= height + 1 && height <= verify_tx_range.1 {
71+
headers_group_size = 1;
72+
} else {
73+
headers_group_size += 1;
74+
}
6275
let new_client: packed::SpvClient = service.tip_client().pack();
6376

6477
old_client

0 commit comments

Comments
 (0)