Skip to content

An action Arcade rejects after RECEIVED jams the wallet: actions funded from its change stay pending and its change input leaves the balance (fix in ts-stack#1080) #167

Open

Description

@Calgooon

What happened

On mainnet on 2026-10-14, this app (1.7.0, @bsv/wallet-toolbox-mobile 2.14.4, Arcade broadcaster) jammed. It showed 6,654 sats against about 11,657 on chain.

  • 245294a2fe4cbd3ec02f55de9f797c546bdb4f04a3ff1158ce7543affe37d1ec spent a head output that dcd5b308b8064cb3ab3cf315a40b4122dd487161e580fb9dd30b70ad6ccdc63b had already spent (mined at 971076), plus dcd5b308:1, the wallet's change. Arcade answered RECEIVED (202), and the wallet stored it as unproven and offered its change as funding. Arcade then answered REJECTED 466, "UTXO_SPENT ... 212d64c0...:0 utxo already spent by tx dcd5b308...".
  • 9e58fd11025d14e675d3c8223a94ab9639d328fee1e10e46302e1b2aa6df790c was funded by dcd5b308:0, b06d11e7...:0 and 245294a2:1. Arcade answered RECEIVED, then REJECTED, "parent rejected (ancestor 245294a2...)".
  • Eight minutes later the wallet still held both as unmined. The head dcd5b308:0 was marked spent by the dead 9e58fd11, and every later action on those coins was rejected.

Where

@bsv/wallet-toolbox-mobile (source: bsv-blockchain/ts-stack). Issue bsv-blockchain/ts-stack#1079, fix bsv-blockchain/ts-stack#1080.

Two gaps:

  • The children were not failed. An action funded from a rejected action's change stayed pending. Only the reconcile poll failed it, once it was an hour old.
  • The unnamed input was quarantined. The input-conflict quarantine marked every input of the rejected action unspendable, including dcd5b308:1, although Arcade named the other input as the spent one.

To complete here

Bump @bsv/wallet-toolbox-mobile to the first release that carries ts-stack#1080, and @bsv/expo-wallet-toolbox if its range excludes it.

A wallet already in this state heals on the next terminal verdict, the Arcade event or the reconcile poll, as long as the rejected action is still pending. Change already quarantined by an older release's verdict is not restored: no existing specOp does that.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions