Skip to content

Add Silent Payments for the Liquid Network#37

Open
42Pupusas wants to merge 6 commits into
ElementsProject:mainfrom
42Pupusas:elip-silent-payments-liquid
Open

Add Silent Payments for the Liquid Network#37
42Pupusas wants to merge 6 commits into
ElementsProject:mainfrom
42Pupusas:elip-silent-payments-liquid

Conversation

@42Pupusas
Copy link
Copy Markdown

This ELIP specifies BIP-352 Silent Payments adapted to the Liquid Network's Confidential Transactions. Each normative rule is tagged as BIP-352-derived, a Liquid adaptation, or an open design choice (stated preferentially). Includes worked test vectors and abstract data structures.

A Standards Track draft specifying BIP-352 Silent Payments adapted to the
Liquid Network's Confidential Transactions. Each normative rule is tagged
as BIP-352-derived, a Liquid adaptation, or an open design choice (stated
preferentially). Includes worked test vectors and abstract data structures.
Comment thread elip-silent-payments-liquid.mediawiki Outdated

==Reference Implementation==

A reference implementation demonstrating address encoding, input aggregation,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

A reference implementation in python would be nice to review this ELIP

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I have working examples using LWK in Rust, is that acceptable? not too familiar with Python

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Comment thread elip-silent-payments-liquid.mediawiki Outdated
Comment thread elip-silent-payments-liquid.mediawiki Outdated
Because <code>bk_k</code> and <code>t_k</code> are outputs of a random oracle (a
tagged hash) evaluated on '''disjoint domains''' over the same secret <code>S</code>,
they are independent: knowledge of one does not assist in recovering the other or
<code>S</code>. The domain tag <code>LiquidSilentPayments/Blind</code> MUST differ
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Would a third person who wants to detect silent payments, be able to compute blinding keys for each transaction and then check if it unblinds to identify Silent payments?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

It should not be possible as this is using the same hardness assumption from BIP-352 that the blinding key is computed from the sender+receiver Diffie Hellman shared secret, which should never be computable by third parties.

Comment thread elip-silent-payments-liquid.mediawiki Outdated
42Pupusas added 5 commits June 2, 2026 15:22
Trim BIP-352 re-explanation to focus on Liquid-specific differences:
- Shorten abstract and motivation prose
- Reduce BIP-352-compliant sections to brief restatements
- Remove Rationale section (reasoning is stated inline in each
  [Liquid]/[Choice] design section)
The flow is essentially identical to BIP-352; fold the three subsections
(filter omission, server interface) into one paragraph plus the interface
example.
Switch silent-payment outputs from confidential P2WPKH to confidential
Taproot (OP_1 <x_only(P_k)>), with P_k used directly per BIP-352 (no
script tree, no taptweak). This aligns the output, spend path, and
index-server data with BIP-352's x-only conventions verbatim.

- Output is now Taproot-only; eligible inputs keep BIP-352's full set
  (P2TR, P2WPKH, P2SH-P2WPKH, P2PKH), so an SP output is itself eligible
  as a later input and the even-Y rule applies unchanged.
- Spending is an ordinary BIP-340 key-path spend (even-Y normalized).
- Collapse the now-pure-BIP-352 sections (input aggregation, eligible
  inputs, shared secret, output representation) into one consolidated
  'Reused from BIP-352 unchanged' section.
- Update test vectors (Taproot scriptPubKeys) and reference-implementation
  note (verified against LWK, reproduces vectors byte-for-byte).
…ls section

The previous lq/tlq HRP collided with ordinary Liquid CONFIDENTIAL
addresses (blech32 lq/tlq), defeating the distinct-HRP goal. Switch to
lqsp/tlqsp, which differ from every existing Liquid HRP (ex/tex
unconfidential, lq/tlq confidential) and from Bitcoin's sp/tsp. Update
the test-vector address accordingly (verified against LWK).

Also fold the Labels section into the consolidated BIP-352 reused
section (labels need no Liquid adaptation); the one substantive note —
the blinding key is label-independent — moves to the blinding-key section.
Reduce the Reference Implementation paragraph to what the public
reference covers: it reproduces the test vectors byte-for-byte and
demonstrates non-interactive unblinding of the shared-secret-blinded
output. Wallet integration (scanning, signing, transaction building) is
left to implementations, rather than enumerated here.
@42Pupusas 42Pupusas requested a review from emjshrx June 3, 2026 01:54
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.

2 participants