sparrowwallet / sparrow

Desktop Bitcoin Wallet focused on security and privacy. Free and open source.
https://sparrowwallet.com/
Apache License 2.0
1.36k stars 192 forks source link

TX made from Samurai Paynym to Sparrow Paynym not received #475

Closed CommanderUkraine closed 2 years ago

CommanderUkraine commented 2 years ago

Made a TX from SamuraiWallet to SparrowWallet Paynym Contact - tx has 12 confirmations but Sparrow does not show any income :-(

Screenshot_20220320-154411_Samourai

craigraw commented 2 years ago

Is this the same PayNym from #474?

craigraw commented 2 years ago

Also, what method of connection are you using with Sparrow - Bitcoin Core or Electrum server?

CommanderUkraine commented 2 years ago

Also, what method of connection are you using with Sparrow - Bitcoin Core or Electrum server?

Electrum Server and yes it is the same paynym like 474.

CommanderUkraine commented 2 years ago

My log is full of these ERRORs... :-(

022-03-20 21:21:53,490 ERROR [JavaFX Application Thread] c.s.s.w.WalletForm [null:-1] Could not determine payment codes for wallet SparrowWallet java.lang.IllegalStateException: Cannot add payment code wallet to P2TR wallet at com.sparrowwallet.drongo/com.sparrowwallet.drongo.wallet.Wallet.addChildWallet(Unknown Source) at com.sparrowwallet.drongo/com.sparrowwallet.drongo.wallet.Wallet.addChildWallet(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer$PaymentCodesService$1.call(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer$PaymentCodesService$1.call(Unknown Source) at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$7(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) 2022-03-20 21:21:53,949 ERROR [JavaFX Application Thread] c.s.s.w.WalletForm [null:-1] Could not determine payment codes for wallet SparrowWallet java.lang.IllegalStateException: Cannot add payment code wallet to P2TR wallet at com.sparrowwallet.drongo/com.sparrowwallet.drongo.wallet.Wallet.addChildWallet(Unknown Source) at com.sparrowwallet.drongo/com.sparrowwallet.drongo.wallet.Wallet.addChildWallet(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer$PaymentCodesService$1.call(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer$PaymentCodesService$1.call(Unknown Source) at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$7(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) 2022-03-20 21:21:54,621 ERROR [JavaFX Application Thread] c.s.s.w.WalletForm [null:-1] Could not determine payment codes for wallet SparrowWallet com.sparrowwallet.sparrow.net.ServerException: Failed to retrieve transaction history for paths: [m/0] at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer.getReferences(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer.getHistoryToGapLimit(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer.getHistory(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer$PaymentCodesService$1.call(Unknown Source) at com.sparrowwallet.sparrow@1.6.2/com.sparrowwallet.sparrow.net.ElectrumServer$PaymentCodesService$1.call(Unknown Source) at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$6(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$7(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Caused by: com.sparrowwallet.sparrow.net.ServerException: Retries exhausted at com.sparrowwallet.sparrow@1.6.2/

craigraw commented 2 years ago

Thanks for the logs.

It appears you are using a Taproot (P2TR) wallet. PayNyms are not currently supported in P2TR wallets - Sparrow should have done a better job to disable BIP47 functionality, and this has been fixed in https://github.com/sparrowwallet/drongo/commit/88bd6ada98d98451c580ee4209ec86ec95fa2c94. I've also updated the documentation for this. Taproot wallets will probably be supported in future, but the spec will need to be extended for this.

The good news is that the funds are not lost. You can create a Native Segwit wallet in Sparrow with the same seed words to recover them. You may need to send another notification transaction (it depends if one was already sent from the Samourai +fancyunion929 wallet) but once the link is established Sparrow should find the previously sent transaction.

CommanderUkraine commented 2 years ago

Well, after recovering the wallet I get a new/different paynym ID of course - it does not find the previous transactions.

craigraw commented 2 years ago

You should not get a new PayNym, since the payment code for the wallet is constructed independently of the script type.

Check that the master fingerprint of the Native Segwit wallet matches that of the Taproot wallet - if they differ, the seed is different.

CommanderUkraine commented 2 years ago

Negative. I still have access to the Taproot Wallet and can display my BIP-39 seed. Using exactly this seed for creating a new keystore and importing it into a new wallet I get a different fingerprint (!).

craigraw commented 2 years ago

Are you using a passphrase in either wallet?

CommanderUkraine commented 2 years ago

Yes, I do.

craigraw commented 2 years ago

Different passphrases are the only explanation here - make sure the passphrase is the same in the Taproot and Native Segwit wallets. If the passphrase and the seed words are identical, the master fingerprint and PayNym will be too.

CommanderUkraine commented 2 years ago

User to dumb error - mixed up password and passphrase ... thanks for your help!