Skip to content

Silent Payments - Phase1#1

Closed
odudex wants to merge 12 commits into
selfcustody:masterfrom
odudex:feat/sp-phase1
Closed

Silent Payments - Phase1#1
odudex wants to merge 12 commits into
selfcustody:masterfrom
odudex:feat/sp-phase1

Conversation

@odudex
Copy link
Copy Markdown
Member

@odudex odudex commented May 29, 2026

This PR integrates PRs diybitcoinhardware#64, diybitcoinhardware#95, diybitcoinhardware#96 and diybitcoinhardware#130.
Each commit was sequentially rebased, reviewed and has, fixes, tightening to specs, merge conflicts and integration solved, DRY and older micropython syntax compatibility ensured.
Authorship from @kdmukai and @notTanveer preserved.

kdmukai and others added 12 commits May 29, 2026 09:00
Reject non-int and reserved/out-of-range labels (m=0 is change), drop the
non-standard str/bytes label support, correct swapped scan/spend keys in the
network test, and apply black formatting.
- Subclass EmbitError so existing except EmbitError callers still catch
  malformed-address errors (e.g. script.address_to_scriptpubkey).
- Restore the BIP-141 2-40 byte witness program limit in decode() and
  drop the sp/tsp special-casing; SP addresses are not witness programs.
- Replace the 118 length cap with BIP-352's recommended 1023 so valid
  higher-version silent payment addresses decode; cite BIP-173/BIP-352.
- Drop the no-placeholder f-string and the encode() try/except that
  masked the original Bech32DecodeError.
Drop the typing and collections imports (Counter/defaultdict, Tuple/List/Dict)
and convert COutPoint from typing.NamedTuple to a plain class with positional
int.to_bytes. Replace remaining f-strings with str.format and remove the now
unused COutPoint import from bip352.
- Remove bech32_decode_long; the flexible bech32_decode (this branch) already
  handles long strings, so decode SP keys and silent payment addresses through
  it, converting Bech32DecodeError to the caller's error type.
- Drop the now-dead 'is None' guards (convertbits raises instead of returning
  None) and wrap conversion to keep DescriptorError/ValueError consistent.
- Seek to an absolute offset after 'sp(' so parsing is robust to a short read.
- Raise a clear DescriptorError for unsupported address/derive/script_pubkey on
  SilentPaymentDescriptor, and cover the Descriptor.from_string('sp(...)') path.
@odudex odudex closed this May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants