Skip to main content

3. Merchant ↔ EMI

Actors

ActorRole
Merchant BackendMerchant's server-side system. Controls multiple stealth addresses, manages L3 commitments and burns.
EMI BackendElectronic Money Institution. Verifies KYB, validates burn proofs, initiates fiat payouts.
On-Chain (Contract)L3 Merkle tree for commitments, burn mechanism with BPK.
Bank / PSPExecutes fiat transfer to merchant's bank account.

Flow Overview

Detailed Flow

Step 1: Merchant commits stealth address balances to L3

The merchant backend controls multiple stealth addresses that have accumulated encrypted balance from customer payments (see doc 2). To settle, the merchant moves these balances into L3 commitments.

Step 2: Merchant burns L3 commitments

The merchant burns committed stakes using its EMI-assigned userSalt and a random nonce. The burn produces a burnBPK that only the EMI can attribute to the merchant.

Step 3: Merchant requests settlement from EMI

The merchant contacts the EMI with proof of burn. The EMI verifies the merchant's KYB status, validates the burn on-chain, and initiates fiat transfer.

Full End-to-End Flow

Privacy Properties

PropertyStatusHow
Merchant's stealth addresses hidden from EMIYesEMI never sees which stealth addresses the merchant operates
Revenue volume per stealth address hiddenYesL3 commitments break the link between stealth address and settlement amount
Link between customer payments and settlementBrokenL3 commit + burn severs the on-chain trail
EMI knows merchant identityYesKYB establishes the merchant's legal identity
EMI knows settlement amountYesClaimed in settlement request, verified against burn
EMI knows burn saltYesEMI assigned the userSalt during KYB onboarding

ZKP/EB Components and Features Used

Component / FeatureUsed?How
Stealth AddressesYesMerchant controls multiple stealth addresses that accumulate revenue from customer payments
Encrypted Balance (EB)YesStealth addresses hold encrypted balances — amounts hidden on-chain
L3 CommitmentsYesMerchant stakes EB into L3 Merkle tree before burning
Burn with BPKYesburn(stakes, {userSalt, nonce}) — tokens destroyed, burnBPK = hashToCurve(userSalt ‖ nonce) for EMI verification
userSaltYesEMI-assigned salt per merchant — links burn to merchant identity without revealing stealth addresses
EBEMT ContractYesTokens are permanently burned on-chain, maintaining 1:1 reserve integrity
Blacklist / FreezePossibleEMI could freeze specific stealth addresses if flagged during AML review
UKRC / Threshold DecryptionNoNot directly involved — EMI verifies burn via BPK, not by decrypting balances

Settlement Models

ModelDescriptionFrequencySuited For
On-demandMerchant initiates settlement whenever neededAd hocSmall merchants, low volume
BatchedMerchant accumulates burns, requests settlement periodicallyDaily / weeklyMedium merchants
ScheduledMerchant and EMI agree on a regular settlement cadenceFixed intervalsLarge merchants, contractual SLA
ThresholdMerchant auto-triggers settlement when accumulated balance exceeds a thresholdEvent-drivenHigh-volume merchants

Requirements

#RequirementPriorityNotes
R1Merchant can settle encrypted stablecoin revenue for fiat via EMIMustCore off-ramp
R2Merchant must complete KYB with the EMI before any settlementMustBusiness identity verification — UBO, registration, AML screening
R3EMI verifies burn proof (BPK match) before initiating fiat transferMustPrevents fraudulent settlement claims
R4Tokens are permanently burned on-chain before fiat is paid outMust1:1 reserve integrity — MiCA Art. 54
R5EMI never learns which stealth addresses the merchant operatesMustCore privacy property
R6Merchant backend can commit and burn from multiple stealth addresses in a single settlementShouldOperational efficiency for multi-address merchants
R7Settlement SLA: fiat within 1 business day of verified burnShouldContractual, depends on banking partner
R8EMI provides an API for programmatic settlement requestsShouldHigh-volume merchants need automation
R9Burn must support consuming multiple L3 commitments in a single private withdrawalShould (long-term)Merchant accumulates many small commitments from individual customer payments across stealth addresses. At settlement time, these must be burned together in one operation — not one-by-one. Without batch burn, the number of individual burns leaks transaction volume and creates a gas/cost bottleneck. This is a private withdrawal: the burn collapses N commitments into a single proof without revealing which commitments were consumed.

Assumptions

#AssumptionImpact if Wrong
A1Merchant operates its own backend — not the SDKIf using SDK, the integration model and key management story change
A2Merchant controls multiple stealth addresses from customer paymentsIf single address, simplifies the flow but reduces privacy
A3EMI assigns a userSalt to the merchant during KYB onboardingIf salt assignment works differently, BPK verification logic changes
A4Merchant can batch multiple L3 commitments into a single burnIf one-burn-per-commitment, gas cost and complexity increase
A5Gas for L3 stake + burn is paid by the merchantIf EMI-sponsored or relayed, changes trust model
A6EMI can process settlements within published SLABanking partner latency is the bottleneck
A7KYB is a one-time process; subsequent settlements only require burn verificationIf re-verification required per settlement, adds friction

Open Questions

#QuestionContextAnswer
Q1What does KYB onboarding look like in practice?Business registration docs, UBO verification, AML screening — is this handled by the EMI directly or via a third-party KYB provider?
Q2How is the userSalt delivered to the merchant during KYB?Secure channel? API response? Does the merchant need to store it securely?
Q3Can the merchant aggregate multiple burns into a single settlement request?Reduces API calls but increases verification complexity on the EMI side
Q4What are the AML thresholds for merchant settlements?Enhanced due diligence for large settlements (e.g., > €15k single, > €100k cumulative)
Q5Who pays gas for the L3 stake and burn transactions?Merchant? EMI-sponsored? Relayer? Gas costs matter at scale.
Q6How does multi-currency settlement work?Merchant earns EUR + USD across stealth addresses — settle each separately or convert?
Q7What happens if a merchant is flagged for AML after burns but before settlement?Tokens are already destroyed on-chain. Fiat transfer is blocked. How is this resolved?
Q8Is there a fee structure for settlement?EMI spread, flat fee, or percentage?
Q9Can the EMI batch-verify multiple burn proofs in one operation?Would improve settlement efficiency for high-volume merchants
Q10How does the merchant prove total burned amount when burns span multiple transactions?EMI needs to sum verified burns. Does the merchant provide a list of txHashes, or does the EMI scan on-chain?