From: 志宇 Date: Thu, 5 Oct 2023 16:19:17 +0000 (+0800) Subject: Merge bitcoindevkit/bdk#1064: Better tests for transaction conflict handling X-Git-Tag: v1.0.0-alpha.2~6 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/database/enum.AnyDatabaseConfig.html?a=commitdiff_plain;h=4ee11aae12f5f5b636008195998833268d5edc66;p=bdk Merge bitcoindevkit/bdk#1064: Better tests for transaction conflict handling 6d601a7e885bfc627594b794b1a460be47799eea test(chain): Add test for conflicting transactions (Daniela Brozzoni) 48ca95b5412fd3719b749d33c85572941817e967 test(chain): Add test for walk_ancestors (Daniela Brozzoni) 59a2403e2802d27c51f2d30b5f8e1ed9f813dfcc test(chain): Introduce TxTemplate (Daniela Brozzoni) 6e511473a5e5730d5cad237c651c83dc4c5d8756 test(chain): add block_id! utility macro (Daniela Brozzoni) 62de55f12d910ac35180cbb3f0e4c4b353c44d11 fix(chain): Consider conflicting ancestors in... ...try_get_chain_pos (Daniela Brozzoni) a3e8480ad9d41190da8de732dc8d00d636a0c911 doc(chain): Clarify direct_conflicts_of_tx's docs (Daniela Brozzoni) 4742d88ea322e43120fa96f6421a149294d26e3b feat(chain): Introduce TxAncestors, walk_ancestors (Daniela Brozzoni) 2f26eca607dc5de83a9bb12c33fa5336026ab3dd fix(chain): TxDescendants performs a BFS (Daniela Brozzoni) 486e0e143741a8c1312e7cb5258b3d43256dc9ec doc(chain): Fix typos (Daniela Brozzoni) Pull request description: ### Description Fixes #1063. This PR introduces a new `TxTemplate` struct to test different transaction conflict scenarios in `TxGraph`. The following transaction conflict scenarios are tested: - 2 unconfirmed txs with different last_seens conflict. The most recent tx should be the only tx that appears in the list methods. - 3 unconfirmed txs with different last_seens conflict. The most recent tx should be the only tx that appears in the list methods. - An unconfirmed tx U conflicts with a tx anchored in orphaned block O. O has higher last_seen. O should be the only tx that appears in the list methods. - An unconfirmed tx U conflicts with a tx anchored in orphaned block O. U has higher last_seen. U should be the only tx that appears in the list methods. - Multiple unconfirmed txs conflict with a confirmed tx. None of the unconfirmed txs should appear in the list methods. - B and B' conflict. C spends B. B' is anchored in best chain. B and C should not appear in the list methods. - B and B' conflict. C spends B. B is anchored in best chain. B' should not appear in the list methods. - B and B' conflict. C spends both B and B'. C is impossible. - B and B' conflict. C spends both B and B'. C is impossible. B' is confirmed. - B and B' conflict. C spends both B and B'. C is impossible. D spends C. These tests revealed that `TxGraph::walk_conflicts` was not checking ancestors of the root tx for conflicts. `TxGraph::walk_conflicts` has been refactored to check for conflicting ancestor transactions by using a new `TxAncestors` iterator in `TxGraph`. ### Changelog notice - Introduced `tx_template` module - Introduced `TxGraph::TxAncestors` iterator - Refactored `TxGraph::walk_conflicts` to use `TxGraph::TxAncestors` - Added `walk_ancestors` to `TxGraph` ### Checklists All Submissions: - [x] I've signed all my commits - [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) - [x] I ran cargo fmt and cargo clippy before committing #### New Features: * [x] I've added tests for the new feature * [x] I've added docs for the new feature ACKs for top commit: evanlinjin: ACK 6d601a7e885bfc627594b794b1a460be47799eea Tree-SHA512: ea151392874c4312233e4e10299579f4eee4a7100ae344b4d7f19994284b49c1e43f37338bed931d16e77326021166ea0b94d6de3ccf50a8fabb25139a8e69b4 --- 4ee11aae12f5f5b636008195998833268d5edc66