Skip to content

Syncing causes get_address index to decrement #649

@icota

Description

@icota

This only happens with certain xpubs. Code:

    #[test]
    fn test_address_looping() {
        let wallet =
            Wallet::new("wpkh([5d14cd2a/84h/1h/0h]tpubDCWhawC5a8Rgx6y7rk5qHtueax2MVWfdfobzEcmcSvQUDYq94dnqyx6KAFbxCocxQnnLuFcRYFWmvXS9DtWRYqJeU33pcvsam9AaozJXS1P/0/*)",
                        None,
                        Network::Testnet,
                        MemoryDatabase::new()).unwrap();

        for _ in 0..15 {
            let address = wallet.get_address(AddressIndex::New).unwrap();
            println!("{}:  {}", address.index, address.address.to_string());
        }

        println!("wallet.sync()");
        let client = get_electrum_client(-1, "ssl://electrum.blockstream.info:60002").unwrap();
        let blockchain = ElectrumBlockchain::from(client);

        wallet.sync(&blockchain, SyncOptions { progress: None }).unwrap();

        for _ in 0..15 {
            let address = wallet.get_address(AddressIndex::New).unwrap();
            println!("{}:  {}", address.index, address.address.to_string());
        }
    }

Output:

0:  tb1qghhpvphu6rd6ygwuurw3p9cg7se84taj2vssdu
1:  tb1q79crajpg7y838vmqngerx6eqv5tuytzlk7cx3n
2:  tb1qcae3r5r6pv7p59s9vy3depphz3vffuqhrxm0e3
3:  tb1qemh2gefeeydc8k649tqlhz4egr3pktnt72h9xz
4:  tb1qckls5f7xrz29k3jtuw67ul6dp6mlz39m6r0xmj
5:  tb1qvycmqxyffvllmt7u8732nr7l576s9al6qlfleq
6:  tb1qrxm4qpdjevpzjmh7x7048kng6ys0audzz50jwn
7:  tb1q285u2994gsyuplqajm0ttadh238pp2clsutxc3
8:  tb1q5cfe3nrwtl4qfxyavnagxe7lqchskdjvkeqw50
9:  tb1qpa8375ve0um755svsm7u8r73ltk5xc0hwmp240
10:  tb1qc3nd440fqzx3zzwvm2n47g5dn2ahpcs74e58rw
11:  tb1qur22cvhcwtez5d7f0jeajg6ul22chqvcqwv3pg
12:  tb1qyud6sa4dseyx5k8vzp9yhq2nef9p5zrcv7pjny
13:  tb1qq50glc8hh20k8fh39u9xedshy6plra69cx4xxt
14:  tb1q92llgymvnl90y2a6ku2fztfw4heg400psph740
wallet.sync()
3:  tb1qemh2gefeeydc8k649tqlhz4egr3pktnt72h9xz
4:  tb1qckls5f7xrz29k3jtuw67ul6dp6mlz39m6r0xmj
5:  tb1qvycmqxyffvllmt7u8732nr7l576s9al6qlfleq
6:  tb1qrxm4qpdjevpzjmh7x7048kng6ys0audzz50jwn
7:  tb1q285u2994gsyuplqajm0ttadh238pp2clsutxc3
8:  tb1q5cfe3nrwtl4qfxyavnagxe7lqchskdjvkeqw50
9:  tb1qpa8375ve0um755svsm7u8r73ltk5xc0hwmp240
10:  tb1qc3nd440fqzx3zzwvm2n47g5dn2ahpcs74e58rw
11:  tb1qur22cvhcwtez5d7f0jeajg6ul22chqvcqwv3pg
12:  tb1qyud6sa4dseyx5k8vzp9yhq2nef9p5zrcv7pjny
13:  tb1qq50glc8hh20k8fh39u9xedshy6plra69cx4xxt
14:  tb1q92llgymvnl90y2a6ku2fztfw4heg400psph740
15:  tb1qzyzavz6qc9qn52hxrfhpddztas84r69ytqzgyh
16:  tb1qgfwvg3tpvkedzl5exmmwjlpzx74rtmkw0dtemg
17:  tb1qh6vsnhff77tr9g0yg5jum0n3h5ccesnhldfsjw

One would expect get_address subsequent to sync to return an address at index 15.

Build environment

  • BDK tag/commit: a328607
  • OS+version: Ubuntu 22.04
  • Rust/Cargo version: 1.54.0
  • Rust/Cargo target: x86_64

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions