electrs icon indicating copy to clipboard operation
electrs copied to clipboard

Bug: Addresses affected by descendant transactions are not notified on transaction replacement

Open craigraw opened this issue 1 year ago • 4 comments

If you watch https://www.youtube.com/watch?v=pWmgu5eA4y4 to 9m 51s, you will see Sparrow reflects an incorrect state of the wallet. This is caused by the lack of all the correct notifications from Electrs - all addresses affected by the replacement of a transaction (removing it from this wallet) are not notified. The addresses that are not notified relate to child transactions that spend the (now removed) output of the replaced transaction.

I've reproduced the scenario using DEBUG logging in Sparrow, which funded address/0/2 in the Alice wallet with the first transaction, and then spent from /0/2 and /1/0 addresses to create the child transaction to the third (Bob) wallet. On broadcasting the RBF transaction from the first (Evil RBFer) wallet, the Alice wallet was notified of changes to /0/1 and /0/2, but not /1/0.

craigraw avatar Apr 15 '24 10:04 craigraw

Many thanks for reporting this issue!

romanz avatar Apr 16 '24 03:04 romanz

I tried to reproduce the issue on Regtest with Sparrow 1.8.5 (built from source), but it seems to fail to start - with the following exception:

$ ./sparrow --network regtest

> Configure project :
Project : => 'com.sparrowwallet.sparrow' Java module

> Task :run FAILED
Exception in Application start method
Exception in Application stop method
2024-04-20 08:43:29,469 ERROR Exception in thread "main"
java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:901)
        at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
        at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.lang.IllegalArgumentException: No enum constant com.samourai.wallet.constants.SamouraiNetwork.REGTEST
        at java.base/java.lang.Enum.valueOf(Enum.java:274)
        at [email protected]/com.samourai.wallet.constants.SamouraiNetwork.valueOf(SamouraiNetwork.java:11)
        at [email protected]/com.sparrowwallet.sparrow.whirlpool.WhirlpoolServices.getSamouraiNetwork(WhirlpoolServices.java:64)
        at [email protected]/com.sparrowwallet.sparrow.whirlpool.WhirlpoolServices.computeExtLibJConfig(WhirlpoolServices.java:59)
        at [email protected]/com.sparrowwallet.sparrow.whirlpool.WhirlpoolServices.<init>(WhirlpoolServices.java:51)
        at [email protected]/com.sparrowwallet.sparrow.AppServices.<init>(AppServices.java:98)
        at [email protected]/com.sparrowwallet.sparrow.AppServices.initialize(AppServices.java:526)
        at [email protected]/com.sparrowwallet.sparrow.SparrowDesktop.start(SparrowDesktop.java:51)
        at javafx.graphics@18/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
        at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
        at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
        at javafx.graphics@18/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
        at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
        at javafx.graphics@18/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:316)
        ... 1 common frames omitted

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':run'.
> Process 'command '/usr/lib/jvm/java-19-openjdk-amd64/bin/java'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

BUILD FAILED in 1s
12 actionable tasks: 2 executed, 10 up-to-date

@craigraw could you please take a look?

romanz avatar Apr 20 '24 05:04 romanz

I'll try to reproduce on testnet.

romanz avatar Apr 20 '24 06:04 romanz

See https://github.com/sparrowwallet/sparrow/issues/1385. You can simply run latest HEAD to avoid this.

craigraw avatar Apr 22 '24 11:04 craigraw