-
Notifications
You must be signed in to change notification settings - Fork 412
Closed
Labels
Milestone
Description
There seems to be quite a few independent efforts to define and address problems with the syncing/scanning API. I thought it would be nice to organize them in one place and have a single PR that does all of them.
- Rename "scan" to "rescan": Anything that is using
stop_gapstyle scanning must necessarily be assuming that another wallet must have given out addresses prior to this one. The namerescancommunicates this better (h/t @danielabrozzoni). Relatedscan_without_keychainandscan's names should be inverted #1112. - ([wallet] Consider having a higher-level method for syncing #1153) We should have data structures defined in
bdk_chainthat define bundles of things aWallet(or any other system) could be interested in. I think these should be:
/// A list of blockchain entities for which we want to receive any related transaction data.
struct SyncRequest {
/// transactions that spend from or two these script pubkeys
spks: Vec<ScriptBuf>,
/// Transactions with these txids
txids: Vec<Txid>,
/// Transactions with these outpoints or spend from these outpoints
outpoints: Vec<OutPoint>,
/// The local chain checkpoint. The sync process will return a new chain that extends this one.
checkpoint: Option<CheckPoint>
}
/// Script pubkeys indexed by their keychain.
struct RescanRequest<K, I> {
/// Iterators of script pubkeys indexed by the keychain index
spks_by_keychain: BTreeMap<K,I>,
/// The local chain checkpoint. The scan process will return a new chain that extends this one.
checkpoint: Option<CheckPoint>
}- Now the problem with the above is that we want to be able to easy log when a new spk etc is drawn by the blockchain. So really we can't have these fields public -- internally each thing should be
Box<dyn Iterator<Item = ...>>. Then when you add a new items to theSyncRequestit should be something likeSyncRequest::append_spks(&mut self, spks: impl IntoIterator<Item=ScriptBuf>)which would append the new iterator onto the existing one withchainand replace it. - Then we need APIs in wallet that return these structs (Syncing/Rescanning super issue #1195)
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done