name the sortedmulti reinterpretation in the message for a bsms record whose first address does not match
What changed, and why it matters
This commit only changes the text of an error message shown to users when importing a Bitcoin Secure Multisig Setup (BSMS) record. It makes the message clearer about why Sparrow treats a multi() quorum as a sortedmulti() equivalent and explains that addresses may differ from other signers if they don't sort keys the same way. There is no code behavior change, no vulnerability fix, and no security-relevant logic change.
No security action required. This is a documentation/clarity improvement. Treat as a normal non-security commit.
Security signals we found
No security signal: this is a user-facing error-message wording change only
No change to validation logic or exception handling
No change to key derivation, descriptor parsing, or address computation
Evidence from the diff
The patch modifies a single exception message in Bip129.java’s checkFirstAddress method. It renames the error text from a generic ‘first address does not match’ message to one that explicitly mentions ‘sortedmulti() equivalent’ and ‘BIP67’ sorting semantics. The control flow, validation logic, and thrown exception type remain identical. No cryptographic, parsing, or trust-boundary behavior is altered.
Changed components
src/main/java/com/sparrowwallet/sparrow/io/Bip129.javaBSMS import first-address mismatch error messageInspect captured patch +2 / −1
### src/main/java/com/sparrowwallet/sparrow/io/Bip129.java
@@ -326,7 +326,8 @@ private void checkFirstAddress(Wallet wallet, OutputDescriptor outputDescriptor,
}
if(OutputDescriptor.LEGACY_MULTI_PATTERN.matcher(descriptor).find()) {
- throw new IllegalStateException("The first address in this BSMS record (" + recordAddress + ") does not match the first address of " + firstAddress + " derived by sorting the provided keys");
+ throw new IllegalStateException("This file describes a multi() quorum, which Sparrow imports as the BIP67 sortedmulti() equivalent, and the first address in it (" + recordAddress + ") does not match the first address of " +
+ firstAddress + " derived by sorting the provided keys. The addresses of this wallet would not match those of the other signers in the quorum unless they sort the keys in the same way.");
} else {
throw new IllegalStateException("The first address in this file (" + recordAddress + ") does not match the first address of the provided descriptor (" + firstAddress + "). " +
"The coordinator may be providing a different set of keys to each signer in the quorum.");Why this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.