feat: add shared seedqr decoding - #155
Conversation
|
Verified locally via synonymdev/bitkit-ios#760 |
Rationale and ecosystem compatibilitySeedQR is a de facto interoperability format originally documented by SeedSigner. It is not a BIP or a universally adopted wallet standard, but it is independently supported by several established signing and wallet projects:
This makes the feature useful for wallet migration and interoperability with air-gapped signers, even though it should not be treated as evidence of broad mainstream-wallet adoption. Keeping the decoder in The implementation is intentionally narrow:
The complete iOS consumer path was also verified on a physical device: both Standard and Compact SeedQR payloads decoded through the locally built core XCFramework and populated the wallet restoration screen’s 12 seed-word fields. |
There was a problem hiding this comment.
Verdict: ✅ Approve
Review: diff 8 files.
Findings:
1 inline (non-blocking)
Audit:
Audited - no findings.
Coverage:
Unit tests: 88% - Seven added tests cover both successful decoders and every malformed-input branch except Standard payload length.
Reviewed by gpt-5.6-sol-high via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner)
There was a problem hiding this comment.
Verdict: ✅ Approve
Reaudit: diff 1 file.
Findings:
N/A
Audit:
Already done in comment.
Coverage:
Unit tests: 100% - The added 47- and 49-digit cases cover both sides of the Standard SeedQR exact-length guard.
Reviewed by gpt-5.6-sol-high via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner)
Related to synonymdev/bitkit-android#1277.
Adds shared SeedQR decoding so the platform apps use one implementation for wallet restoration.
Description
The recently merged Jade integration does not overlap with this work: its air-gapped QR mode was explicitly out of scope, and neither the core Jade adapter nor
jade-client-rsimplements SeedQR decoding.Preview
N/A — no UI changes.
QA Notes
Automated validation:
The SeedQR suite passes 7 tests covering valid Standard and Compact payloads, null-byte entropy, invalid lengths, invalid characters, out-of-range indexes, and invalid BIP39 checksums.
A full
cargo testrun passed 535 tests and failed 11 existing Blocktank integration tests because requests toapi.stag.blocktank.towere unavailable. The suite passes with the network-dependent Blocktank module skipped: 498 passed, 0 failed, 26 ignored.