Skip to content

chore(approach|use-case): update private payments with learnings from poc implementation#105

Merged
rymnc merged 4 commits intomasterfrom
chore/update-private-payments
Mar 11, 2026
Merged

chore(approach|use-case): update private payments with learnings from poc implementation#105
rymnc merged 4 commits intomasterfrom
chore/update-private-payments

Conversation

@rymnc
Copy link
Collaborator

@rymnc rymnc commented Mar 9, 2026

What are you adding?

  • Vendor/Protocol
  • Enterprise Use Case
  • Update to existing content
  • Other

Description

Phase 5 of the playbook, limited learnings, but the big one is operator liveness for plasma approaches

Checklist

  • I've checked this doesn't duplicate existing content
  • All links work
  • Info is accurate

@rymnc rymnc requested review from Meyanis95 and oskarth March 9, 2026 11:18
@rymnc rymnc self-assigned this Mar 9, 2026
@rymnc rymnc linked an issue Mar 9, 2026 that may be closed by this pull request
See [private-stablecoins.md](private-stablecoins.md) for stablecoin-based privacy patterns. Additional considerations:
See [Approach: Private Payments](../approaches/approach-private-payments.md) for detailed solution architecture covering L1 shielded pools, Plasma/Intmax2 stateless rollups, privacy L2s, TEE, and MPC approaches with quantitative comparison from PoC validation.

**PoC Implementation:** [Private Payment PoC](https://github.com/ethereum/iptf-pocs/tree/master/pocs/private-payment). Two approaches validated: L1 Shielded Pool and Plasma/Intmax2.
Copy link
Collaborator

Choose a reason for hiding this comment

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

We can remove mention of PoC here and just redirect to the approach page, then the reader can check recommended solutions there.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in bca42a0

## 6) Open Questions

- Where is the line between payment privacy and AML/CFT obligations?
- Where is the line between payment privacy and AML/CFT obligations? PoC approach: attestation-gated entry (ZK proof of KYC) demonstrates privacy-preserving compliance gating.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Not sure if we should answer the question here. Maybe it just needs a rephrase.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in bca42a0


2. **Liquidity Fragmentation:** Multi-token transfers require same-token constraints in circuits, confirming per-token shielded pools. Remaining: cross-pool atomic swaps and multi-asset circuit designs.

3. **Operational Recovery:** Dual-key architecture (spending + viewing) provides viewing-key-based balance inspection for recovery scenarios. Remaining: full business continuity workflows and key rotation under shielding.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Not sure to understand. Is Operational Recovery about audit?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in bca42a0

6. **Verification Gas Viability:** At ~2.6M gas per on-chain verification for shielded pools, what payment volume threshold makes L2 amortization necessary?

5. **Operational Recovery:** Key recovery and business continuity for institutional payment operations?
7. **Network Timing Correlation:** Some approaches leak timing metadata. What is the acceptable latency overhead for [network anonymity](../patterns/pattern-network-anonymity.md) mitigations?
Copy link
Collaborator

Choose a reason for hiding this comment

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

Isn't this mitigated by size of AS?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

not really, if someone joins the AS, and immediately a similar amount of tokens flows out, its possible to correlate

Copy link
Collaborator

Choose a reason for hiding this comment

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

Yeah, you'd need to round up notes. Fine to keep it as it is.

| **Proof gen (operator)** | N/A | 42-49s |
| **Operator required** | No | Yes |

#### Cross-Cutting Findings
Copy link
Collaborator

Choose a reason for hiding this comment

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

We should mention the issue with withdrawals, the fact that you need a fresh address with no gas, and therefore a relayer to pay for your gas. Add a CR level to the full shielding picture.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in bca42a0

@rymnc rymnc force-pushed the chore/update-private-payments branch from 1ee96b9 to bca42a0 Compare March 9, 2026 19:34

| Dimension | Shielded Pool (L1) | Plasma/Intmax2 (L2) |
|---|---|---|
| **Proving system** | UltraHonk | Plonky2 |
Copy link
Collaborator

@oskarth oskarth Mar 10, 2026

Choose a reason for hiding this comment

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

Can we add a link to Ultrahonk and Plonky2 in ref or as links to more details somewhere

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in a1c0a38

Copy link
Collaborator

@oskarth oskarth left a comment

Choose a reason for hiding this comment

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

A few more questions:

  • Plasma "Gas: withdraw" says "Via withdrawal server" — do we know the actual on-chain gas when the withdrawal lands on L1? Even if the server pays, the cost exists somewhere
  • "MAX_ATTESTATION_TREE_DEPTH=20, supporting ~1M participants" — worth noting this is configurable? Otherwise readers might read it as a fundamental ceiling
  • The old L1 section had "battle-tested infrastructure" which got removed — worth keeping that qualifier somewhere? The comparison table covers gas but not the maturity signal

@rymnc
Copy link
Collaborator Author

rymnc commented Mar 10, 2026

A few more questions:

* Plasma "Gas: withdraw" says "Via withdrawal server" — do we know the actual on-chain gas when the withdrawal lands on L1? Even if the server pays, the cost exists somewhere

* "MAX_ATTESTATION_TREE_DEPTH=20, supporting ~1M participants" — worth noting this is configurable? Otherwise readers might read it as a fundamental ceiling

* The old L1 section had "battle-tested infrastructure" which got removed — worth keeping that qualifier somewhere? The comparison table covers gas but not the maturity signal

addressed in a1c0a38

battle-tested infrastructure sounds way too superlative, removed it.

@rymnc rymnc requested review from Meyanis95 and oskarth March 10, 2026 06:22
- **Dual-key architecture** (spending + viewing) works in both models, confirming selective disclosure is practical without granting transfer authority
- **Attestation-gated entry** via ZK proof of Merkle tree inclusion is feasible (MAX_ATTESTATION_TREE_DEPTH=20, supporting ~1M participants, configurable for larger participtants, but increases proving time)
- **Network timing correlation** is unmitigated in both approaches; see [Network-Level Anonymity](../patterns/pattern-network-anonymity.md) for mitigation patterns
- **Withdrawal to fresh addresses** requires a gas relayer since the recipient address has no ETH for gas; this adds a counterparty-risk dependency to the shielding model
Copy link
Collaborator

Choose a reason for hiding this comment

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

I don't think it's a counterparty risk here; i.e., you can always deanonymize yourself and withdraw funds by sending direct tx to the contract.
It's a more the privacy feature of feeding a fresh address with gas through the relayer that could be censored, the relayer could refuse to transmit your tx.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in d316eaa


**Operator Complexity:**

- **Shielded Pool:** No operator needed; users interact directly with L1 contracts
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is the realyer considered an operator? Is the person in charge of upgrading the contracts considered as an operator?

Copy link
Collaborator Author

@rymnc rymnc Mar 10, 2026

Choose a reason for hiding this comment

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

not exactly, it can be a third party vendor here too

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

addressed in d316eaa

Copy link
Collaborator

Choose a reason for hiding this comment

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

Yes, but my question is, does having the power to upgrade contracts, even though detained by a third party, make this third party an operator of the system?

Also, this might be tracked in another issue; i.e., pattern shielded pool from CROPS pov, where we address this in CR section. cf. #104.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

upgradeable contracts are a building block used across many patterns, with varying upgrading authorities (multisigs, single entities, etc.). rather than defining the trust level of upgradeable contracts in isolation, it's better handled at the vendor card level, since those reflect real-world deployments.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Agree!
But this setting should also live at the pattern level, specifying a different architecture path to avoid assumptions that are linked to a pattern name.

Copy link
Collaborator

@Meyanis95 Meyanis95 left a comment

Choose a reason for hiding this comment

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

Overall look good, modulu latest comments.

@rymnc rymnc merged commit ab2de87 into master Mar 11, 2026
6 checks passed
@rymnc rymnc deleted the chore/update-private-payments branch March 11, 2026 08:41
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.

feat: Private payments approaches learnings

3 participants