Skip to content

Silent Payments - Phase1#131

Closed
odudex wants to merge 15 commits into
diybitcoinhardware:masterfrom
odudex:feat/sp-phase1
Closed

Silent Payments - Phase1#131
odudex wants to merge 15 commits into
diybitcoinhardware:masterfrom
odudex:feat/sp-phase1

Conversation

@odudex

@odudex odudex commented May 29, 2026

Copy link
Copy Markdown
Collaborator

This PR integrates PRs #64, #95, #96 (edit: ,#125) and #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.
Copilot AI review requested due to automatic review settings May 29, 2026 14:02
@odudex odudex requested a review from miketlk as a code owner May 29, 2026 14:02
kdmukai and others added 3 commits May 29, 2026 11:07
The new pure-Python secp256k1 tweak functions require a bytearray (they mutate
in place via index assignment); ec_pubkey_parse returns bytes, which only worked
with the ctypes backend. Wrap parsed points in bytearray so create_outputs works
on both backends (fixes the pure-Python CI path).

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@odudex

odudex commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator Author

This PR is now covered by #134

@odudex odudex closed this Jun 3, 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.

5 participants