Skip to the content
nullroute
Browse the docs

Gaps

What these fixtures show nullroute does not do, or does differently. None of these is hidden by a test: each is asserted as it is.

  1. Caravan and Electrum wallet files are refused. They carry extended keys and a policy but no descriptor, and this module reads descriptors and the Coldcard format only. Sparrow reads both.
  2. Specter DIY's addwallet text and a Receive:-labelled descriptor are refused. Both wrap a descriptor this device would read on its own.
  3. The first address in a BSMS file is compared, and was not until 27 October 2026. It used to be surfaced as an unverified claim with the comparison left to the user, and nullroute read multisig-9.bsms and multisig-address-mismatch.bsms, which Sparrow refuses for the mismatch. Both are refused now (INV-COORD-7), and so is multisig-5.bsms, whose address is /0/0's beside restrictions that start at /2/*.
  4. A BSMS file without a first address is read (multisig-14.bsms, multisig-7.bsms), though BIP-129 says the line must be there. With nothing to compare, this device's own first address is what the signers confirm with each other.
  5. BSMS restrictions other than /0/,/1/ are expanded as given and the second is labelled change, which BIP-129 does not say. Fixed descriptors on other chains are read as one fixed address. Sparrow refuses all of these.
  6. A descriptor is read as written. The 2020 Specter exports have no wildcard and the multisig one uses multi(). Sparrow reads them as an account with receive and change branches and as sortedmulti(); nullroute and Core read one fixed address and the keys in the order given. The two programs derive different addresses from specter-multisig-wallet.json. Current Specter Desktop writes its receive descriptor, with /0/* and a checksum (Wallet.account_map at cryptoadvance/specter-desktop 5d3d5b91e614991c2dedb87c0e0e608e2c6382ae), so a current export has a wildcard to read.
  7. Keystone's zpub and uppercase fingerprint are kept as written. The checksum is recomputed over that text, so it differs from the checksum of the same descriptor written with an xpub and a lowercase fingerprint.
  8. No file here comes from Nunchuk or from Sparrow's current descriptor export. Nunchuk exports BSMS, which is covered as a format but not by a file Nunchuk wrote. Sparrow's current descriptor export puts # headings above its descriptors; that layout was misread as a Coldcard file, and is tested in descriptor.coordinator.test.ts with a file reconstructed from Sparrow's exporter source at the pinned commit, not captured.

Rendered from spec/interop/README.md, the same bytes that ship with the code. SHA-256 b13c292915c8fb50b9d62c7c64e284864faa181ac8982a113e8f90bbd41e7b56