For an unsealed transaction the wallet SDK signs the dApp's own
transaction again: its unshielded signer hands a full per-input list to
UnshieldedOffer.addSignatures, which appends, so each signature the dApp
attached comes back twice and the node refuses the transaction
("mismatch between number of inputs (1) and signatures (2)"). Seen on a
ledger-8 localnet with an agent's signed payment.
- When all of a transaction's unshielded inputs are signed, mn signs only
its own balancing transaction.
- A transaction with some inputs signed and some not, or a signed one
that still needs unshielded value from the wallet, is refused as
InvalidRequest before the operator is asked.
Releases this with the Dust-freeze fix of the previous commit: on a
ledger-8 localnet the built bundle balanced and submitted a signed
payment that published 0.5.4 had the node refuse. The freeze itself does
not show on a localnet, which prices transactions at zero; the test that
runs the SDK's own coin choice on a real wallet state shows it.
Claude-Session: https://claude.ai/code/session_01XQWkwdzqCkXVWeFrvJZ8RQ