};
// See if the emitter outputs the right blocks.
- println!("first sync:");
+
while let Some(emission) = emitter.next_block()? {
let height = emission.block_height();
let hash = emission.block_hash();
.collect::<Vec<_>>();
// See if the emitter outputs the right blocks.
- println!("after reorg:");
+
let mut exp_height = exp_hashes.len() - reorged_blocks.len();
while let Some(emission) = emitter.next_block()? {
let height = emission.block_height();
fn test_into_tx_graph() -> anyhow::Result<()> {
let env = TestEnv::new()?;
- println!("getting new addresses!");
let addr_0 = env
.rpc_client()
.get_new_address(None, None)?
.rpc_client()
.get_new_address(None, None)?
.assume_checked();
- println!("got new addresses!");
- println!("mining block!");
env.mine_blocks(101, None)?;
- println!("mined blocks!");
let (mut chain, _) = LocalChain::from_genesis_hash(env.rpc_client().get_block_hash(0)?);
let mut indexed_tx_graph = IndexedTxGraph::<BlockId, _>::new({
// perform reorgs at different heights, these reorgs will not confirm transactions in the
// mempool
for reorg_count in 1..TIP_DIFF {
- println!("REORG COUNT: {}", reorg_count);
env.reorg_empty_blocks(reorg_count)?;
// This is a map of mempool txids to tip height where the tx was introduced to the mempool
// `next_header` emits the replacement block of the reorg
if let Some(emission) = emitter.next_header()? {
let height = emission.block_height();
- println!("\t- replacement height: {}", height);
// the mempool emission (that follows the first block emission after reorg) should only
// include mempool txs introduced at reorg height or greater
impl<'a> TestLocalChain<'a> {
fn run(mut self) {
- println!("[TestLocalChain] test: {}", self.name);
let got_changeset = match self.chain.apply_update(self.update) {
Ok(changeset) => changeset,
Err(got_err) => {
(4, None)
],
init_changeset: &[
- (0, Some(h!("_"))),
+ (0, Some(h!("_"))),
(1, Some(h!("B'"))),
(2, Some(h!("C'"))),
(3, Some(h!("D"))),
];
for (i, t) in test_cases.into_iter().enumerate() {
- println!("Case {}: {}", i, t.name);
-
let mut chain = t.original;
let result = chain.disconnect_from(t.disconnect_from.into());
assert_eq!(
];
for (i, t) in test_cases.into_iter().enumerate() {
- println!("running test case {}: '{}'", i, t.name);
let result = CheckPoint::from_block_ids(
t.blocks
.iter()
fn checkpoint_insert() {
struct TestCase<'a> {
/// The name of the test.
+ #[allow(dead_code)]
name: &'a str,
/// The original checkpoint chain to call [`CheckPoint::insert`] on.
chain: &'a [(u32, BlockHash)],
core::iter::once((0, h!("_"))).map(BlockId::from)
}
- for (i, t) in test_cases.into_iter().enumerate() {
- println!("Running [{}] '{}'", i, t.name);
-
+ for t in test_cases.into_iter() {
let chain = CheckPoint::from_block_ids(
genesis_block().chain(t.chain.iter().copied().map(BlockId::from)),
)
];
for (i, t) in test_cases.into_iter().enumerate() {
- println!("running test case {}: '{}'", i, t.name);
let mut chain = t.chain;
let result = chain.apply_header_connected_to(&t.header, t.height, t.connected_to);
let exp_result = t