BP-WG / descriptor-wallet

Library for building descriptor-based bitcoin wallets using rust-bitcoin
Apache License 2.0
58 stars 27 forks source link

Error creating psbt file #28

Closed grunch closed 2 years ago

grunch commented 2 years ago

I am trying to create a psbt but I don't get it, I am using it like this

$ btc-cold construct -i "c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab:0 /1/0 rbf" -o "tb1pnh0qpltf4qt4lwm64rz6wkvzqhxavj863x4l5kwvrle3vkqf7uzqg46ufy:100000" .wallet/tr.wallet .wallet/tx.psbt 200

Wallet descriptor:
tr(m=[2dace1d7]/86h/1/0h=[tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm]/*/*)#lq5ct443

Re-scanning network testnet using pandora.network:60001 ... done

Error: PsbtConstruction(ScriptPubkeyMismatch(c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab, 0, Script(OP_PUSHNUM_1 OP_PUSHBYTES_32 9dde00fd69a8175fbb7aa8c5a7598205cdd648fa89abfa59cc1ff3165809f704), Script(OP_PUSHNUM_1 OP_PUSHBYTES_32 0c6e79ed7dcac8a68b44995e66b276f3ba4bfaadfdea1422e790dbb3e6edc223)))

c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab:0 is the outpoint where I have some testnet coins, the wallet descriptor is ok, the checksum is ok, derivation terminal I think is ok.

dr-orlovsky commented 2 years ago

Seems like the derivation terminal is not good. I see you are using an unhardened index in the wallet descriptor for testnet, while according to BIP-86 it should be a hardened 1h.

You can also provide with btc-cold check results to see that the wallet descriptor is a correct one.

grunch commented 2 years ago

Here is what I did:

$ btc-hot info .wallet/seed -P
Password: 

Mnemonic:          inner shuffle point lunar call spoil habit typical dose deal jazz electric
Master key:
  - fingerprint:   2dace1d7
  - id:            2dace1d7a58219523cb755ef703122f2a81be0a9
  - xprv mainnet:  xprv9s21ZrQH143K2twZig1YmttP7qwftmapcSG7HNxvCSm5SmhMDt82DYaKehSkTf1mdBiav1u1jw2cJt74BrytRNyqs4v9wdp6SHPf5C2PFHW
  - xprv testnet:  tprv8ZgxMBicQKsPdiB6PEs3wYWNRyMt8HcpwzBE9oPNgRFZENSSDFTmjHwmZscQU2Q5zdFMv7WmuHcQmjeoK5KqESFSPi8TbzY9MP95Wq5s5u1
  - xpub mainnet:  xpub661MyMwAqRbcFP22phYZ92q7fsnAJEJfyfBi5mNXknJ4Ka2VmRSGmLtoVzDkRbEEwJc65GgkmEJSRSZP3y6YL4245eYWaq1HMbufGAvDPiF
  - xpub testnet:  tpubD6NzVbkrYhZ4XBCtGtXeLxAUzzspHcojXHn1SKRg6h3x4rhCqeHMunZdk2JXx6BUjD8zgrCdJL8V7d3zSpwnDVUM9FHpGMfWwZW52AxXzug
$ btc-hot derive --testnet -s bip86 .wallet/seed .wallet/tr
Seed password: 

Account:
  - fingerprint:   ef40b542
  - id:            ef40b542f728232ab78f9d00b94b0cf727b31979
  - derivation:    m=[2dace1d7]/86h/1/0h
  - xpub:          tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm
Recommended wallet descriptor:
tr(m=[2dace1d7]/86h/1/0h=[tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm]/*/*)#lq5ct443

then I created the wallet from the descriptor

$ btc-cold create "tr(m=[2dace1d7]/86h/1/0h=[tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm]/*/*)#lq5ct443" .wallet/tr.wallet
$ btc-cold address .wallet/tr.wallet 

Wallet descriptor:
tr(m=[2dace1d7]/86h/1/0h=[tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm]/*/*)#lq5ct443

    #0 tb1pnh0qpltf4qt4lwm64rz6wkvzqhxavj863x4l5kwvrle3vkqf7uzqg46ufy
    #1 tb1pm3atkjg9jmvy34shge8j04wwh3q0y0rs6tyd9drl6nnkkkkmkc8s9dk2zn
    #2 tb1ptazdy5jrudxquja7kt57373pzr9fgz3qk429f9ys3fw6hvthh0hqpnkrnl
    #3 tb1pece96mg06lpy5pkwnrm0fzag2tktnxhq2wje44j30575nvuvmccq4cc6zr
    #4 tb1pyqn7rhheswyszhygd2jdwpkljtus73ck93ms7k68t87hv4dnnvns4jvv4e
    #5 tb1p5qezc9wxklhedrcczl0ax9fqveqplfzszlp2qdyw4xpp60lv2q2s35ptj8
    #6 tb1p8x34t702nqty6mu2n23lz5lm9xuwfeqslydp4l8z2xwn6pwrd4tst0wtq9
    #7 tb1pq7agsnkzdw0m8tcrqdrasq2800t4rjj70zhl6eg4rpx3tqn55glssf2a2e
    #8 tb1p4slrzlpnqmfd4d5h5qt2rfxqnrq640dvq9jptdm9pjwft5n45cyskdm477
    #9 tb1pqtaawtddsl4pt4hl2nu48w62hh96952ku4r9hw3r9jfzfxxwfh7qjvgmkh
   #10 tb1pvw22tc0w00pxvk7hxug5eevh7eg5fs2c6aefhy7ygm5h3qtxh5ts0v768z
   #11 tb1pjgwjypk9uy8jqfz9tz7nleyjf38suxnn2m4ytkmccchv9sz869xsuey9dv
   #12 tb1p5mw894qgkja25m0tg7lynnrwchtz7udac4trdf4yrr9weuprlmts66xnvr
   #13 tb1prwl0rk4rhe757emlrekx7tz75te9d82rrjyk4fpmj5k8qr0aygxshuqydh
   #14 tb1p5204hm4fcg9j9p0rsvwlwe6rj0haq67gegf04c6g6wx83m5xq6hsaln2ts
   #15 tb1pqyfcg7p2wrsx4j8fa6rfnfxszrxfy2azuwcnlg5g3kjes4kw2tfscx32ys
   #16 tb1pj5a0ddv90j6xgnvtzun77m9faskep70kj0qwdzsvz2tqkptmyfwqcp6syw
   #17 tb1p8hrfazkn9w66v3p28kd9n8085w8jar2ejy3xh7rcgtvvjpnyvsks9nqrts
   #18 tb1p2y4f6zxaau38evefcscpvl94xzyahmqvfwg2ap4a2ufx0qmjdvzsagwpmq
   #19 tb1pd0mtz482jzkk66fc6jfj60a5v7acvs3dp0lpzgvmue3m0nk49y3q5knual

Sent some tBTC and check the wallet

$ btc-cold check .wallet/tr.wallet
Connecting to network testnet using pandora.network:60001

Wallet descriptor:
tr(m=[2dace1d7]/86h/1/0h=[tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm]/*/*)#lq5ct443

Batch 0/0..20 ... 
  0/0 address tb1pnh0qpltf4qt4lwm64rz6wkvzqhxavj863x4l5kwvrle3vkqf7uzqg46ufy:
    500000 @ c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab:0 - 2134573 block
Batch 0/20..40 ... empty
Batch 0/40..60 ... empty
Batch 1/0..20 ... empty
Batch 1/20..40 ... empty
Total 500000 sats

and finally

$ btc-cold construct -i "c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab:0 /1/0" -o "tb1q9crtjp0y6rt00c4fcrmuamrylzkcalcxls80j9:100000" .wallet/tr.wallet tx.psbt 200

Wallet descriptor:
tr(m=[2dace1d7]/86h/1/0h=[tpubDDZzG1Qav6FLW5ZcMPdCpj1E47hppF9ScrQZZoDRT9CStegM3dLJSmi1WFqhzYVdRJ8cyQWomb7mv1x8UFSptciFca9SCScMcmVevwRBYJm]/*/*)#lq5ct443

Re-scanning network testnet using pandora.network:60001 ... done

Error: PsbtConstruction(ScriptPubkeyMismatch(c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab, 0, Script(OP_PUSHNUM_1 OP_PUSHBYTES_32 9dde00fd69a8175fbb7aa8c5a7598205cdd648fa89abfa59cc1ff3165809f704), Script(OP_PUSHNUM_1 OP_PUSHBYTES_32 0c6e79ed7dcac8a68b44995e66b276f3ba4bfaadfdea1422e790dbb3e6edc223)))
dr-orlovsky commented 2 years ago

$ btc-cold construct -i "c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab:0 /1/0" -o "tb1q9crtjp0y6rt00c4fcrmuamrylzkcalcxls80j9:100000" .wallet/tr.wallet tx.psbt 200

why are you using /1/0 derivation path here while the check command clearly specifies that this is /0/0?

Batch 0/0..20 ... 0/0 address tb1pnh0qpltf4qt4lwm64rz6wkvzqhxavj863x4l5kwvrle3vkqf7uzqg46ufy: 500000 @ c983b16cf9bd843fbc32e855fe8086c5676cdcf986f4a4bb5c72b3cf9a7a6cab:0 - 2134573 block

Just use the correct derivation path and that's all

grunch commented 2 years ago

It's not clear at all how to use the --input option, I added /1/0 thinking we needed to specify testnet, now it works, thank you.