@@ -23,18 +23,18 @@ MARC Protocol encrypts what matters: **amounts and balances are FHE-encrypted**,
2323
2424Zama's fhEVM is ** not limited to EVM** . Zama is expanding to Solana (SVM) and other virtual machines. MARC Protocol follows wherever Zama deploys.
2525
26- | Chain / VM | Status | Impact |
27- | ------------| --------| --------|
28- | ** Ethereum** | Live (Sepolia) | Largest DeFi TVL, highest security |
29- | ** Base** | Planned | #1 in x402 volume (Coinbase ecosystem) |
30- | ** Arbitrum** | Planned | Largest L2 by TVL |
31- | ** Polygon** | Planned | Enterprise + gaming agents |
32- | ** Solana (SVM)** | Planned (Zama roadmap) | Largest non-EVM agent ecosystem |
33- | ** Any future VM** | Automatic | Wherever Zama deploys, MARC follows |
26+ | Chain / VM | Status | Impact |
27+ | ----------------- | ---------------------- | -------------------------------------- |
28+ | ** Ethereum** | Live (Sepolia) | Largest DeFi TVL, highest security |
29+ | ** Base** | Planned | #1 in x402 volume (Coinbase ecosystem) |
30+ | ** Arbitrum** | Planned | Largest L2 by TVL |
31+ | ** Polygon** | Planned | Enterprise + gaming agents |
32+ | ** Solana (SVM)** | Planned (Zama roadmap) | Largest non-EVM agent ecosystem |
33+ | ** Any future VM** | Automatic | Wherever Zama deploys, MARC follows |
3434
3535When Zama deploys to Base, Arbitrum, Solana, and beyond, ** agents on every major chain can make confidential payments through MARC Protocol.** One protocol, every chain, every VM, full privacy.
3636
37- > * "Crypto privacy is needed if you want to make API calls without compromising the information of your access patterns. Even with a local AI agent, you can learn a lot about what someone is doing if you see all of their search engine calls. [ ...] providers will demand an anti-DoS mechanism, and realistically payment per call. By default that will be credit card or some corposlop stablecoin thing, so we need crypto privacy."*
37+ > _ "Crypto privacy is needed if you want to make API calls without compromising the information of your access patterns. Even with a local AI agent, you can learn a lot about what someone is doing if you see all of their search engine calls. [ ...] providers will demand an anti-DoS mechanism, and realistically payment per call. By default that will be credit card or some corposlop stablecoin thing, so we need crypto privacy."_
3838>
3939> -- [ Vitalik Buterin, March 2026] ( https://x.com/VitalikButerin/status/2030510783134871594 )
4040
@@ -85,10 +85,10 @@ The same encrypted cUSDC transfers work identically when triggered by MCP tool c
8585
8686** Two contracts, no pool:**
8787
88- | Contract | Purpose |
89- | ----------| ---------|
90- | ** ConfidentialUSDC** | ERC-7984 token wrapper. USDC wraps to encrypted cUSDC. Agents hold cUSDC directly and transfer it peer-to-peer. |
91- | ** X402PaymentVerifier** | Thin nonce registry. Records payment nonces with ` minPrice ` for server-side price verification. |
88+ | Contract | Purpose |
89+ | ----------------------- | --------------------------------------------------------------------------------------------------------------- |
90+ | ** ConfidentialUSDC** | ERC-7984 token wrapper. USDC wraps to encrypted cUSDC. Agents hold cUSDC directly and transfer it peer-to-peer. |
91+ | ** X402PaymentVerifier** | Thin nonce registry. Records payment nonces with ` minPrice ` for server-side price verification. |
9292
9393## Features
9494
@@ -133,73 +133,73 @@ cd frontend && npm install && npx vite build
133133
134134Inherits: ` ZamaEthereumConfig ` , ` ERC7984 ` , ` ERC7984ERC20Wrapper ` , ` Ownable2Step ` , ` Pausable ` , ` ReentrancyGuard `
135135
136- | Function | Description |
137- | ----------| -------------|
138- | ` wrap(address to, uint256 amount) ` | Wrap plaintext USDC into encrypted cUSDC (fee deducted) |
139- | ` unwrap(address from, address to, bytes32 encAmount, bytes inputProof) ` | Request async unwrap (step 1: burn + KMS decrypt request) |
140- | ` finalizeUnwrap(bytes32 burntAmount, uint64 cleartext, bytes proof) ` | Finalize unwrap with KMS proof (step 2: fee deducted, USDC sent) |
141- | ` confidentialTransfer(address to, bytes32 encAmount, bytes inputProof) ` | Transfer encrypted cUSDC peer-to-peer (fee-free) |
142- | ` confidentialBalanceOf(address account) ` | Get encrypted balance handle (euint64) |
143- | ` setOperator(address operator, uint48 until) ` | Authorize operator for transfers |
144- | ` isOperator(address holder, address spender) ` | Check operator authorization |
145- | ` setTreasury(address newTreasury) ` | Update fee treasury (onlyOwner) |
146- | ` treasuryWithdraw() ` | Withdraw accumulated fees to treasury |
147- | ` pause() / unpause() ` | Emergency pause (onlyOwner) |
148- | ` transferOwnership(address) / acceptOwnership() ` | 2-step ownership transfer |
136+ | Function | Description |
137+ | ----------------------------------------------------------------------- | ---------------------------------------------------------------- |
138+ | ` wrap(address to, uint256 amount) ` | Wrap plaintext USDC into encrypted cUSDC (fee deducted) |
139+ | ` unwrap(address from, address to, bytes32 encAmount, bytes inputProof) ` | Request async unwrap (step 1: burn + KMS decrypt request) |
140+ | ` finalizeUnwrap(bytes32 burntAmount, uint64 cleartext, bytes proof) ` | Finalize unwrap with KMS proof (step 2: fee deducted, USDC sent) |
141+ | ` confidentialTransfer(address to, bytes32 encAmount, bytes inputProof) ` | Transfer encrypted cUSDC peer-to-peer (fee-free) |
142+ | ` confidentialBalanceOf(address account) ` | Get encrypted balance handle (euint64) |
143+ | ` setOperator(address operator, uint48 until) ` | Authorize operator for transfers |
144+ | ` isOperator(address holder, address spender) ` | Check operator authorization |
145+ | ` setTreasury(address newTreasury) ` | Update fee treasury (onlyOwner) |
146+ | ` treasuryWithdraw() ` | Withdraw accumulated fees to treasury |
147+ | ` pause() / unpause() ` | Emergency pause (onlyOwner) |
148+ | ` transferOwnership(address) / acceptOwnership() ` | 2-step ownership transfer |
149149
150150** Events:**
151151
152- | Event | When |
153- | -------| ------|
154- | ` ConfidentialTransfer(from, to, amount) ` | Every encrypted transfer (including wrap mint) |
155- | ` UnwrapRequested(receiver, amount) ` | Unwrap initiated |
156- | ` UnwrapFinalized(receiver, encAmount, clearAmount) ` | Unwrap completed |
157- | ` TreasuryUpdated(old, new) ` | Treasury address changed |
158- | ` TreasuryWithdrawn(treasury, amount) ` | Fees withdrawn |
152+ | Event | When |
153+ | --------------------------------------------------- | ---------------------------------------------- |
154+ | ` ConfidentialTransfer(from, to, amount) ` | Every encrypted transfer (including wrap mint) |
155+ | ` UnwrapRequested(receiver, amount) ` | Unwrap initiated |
156+ | ` UnwrapFinalized(receiver, encAmount, clearAmount) ` | Unwrap completed |
157+ | ` TreasuryUpdated(old, new) ` | Treasury address changed |
158+ | ` TreasuryWithdrawn(treasury, amount) ` | Fees withdrawn |
159159
160160### X402PaymentVerifier
161161
162- | Function | Description |
163- | ----------| -------------|
162+ | Function | Description |
163+ | ------------------------------------------------------------------------------ | -------------------------------------------------- |
164164| ` recordPayment(address payer, address server, bytes32 nonce, uint64 minPrice) ` | Record payment nonce with minimum price commitment |
165- | ` usedNonces(bytes32 nonce) ` | Check if nonce has been used |
165+ | ` usedNonces(bytes32 nonce) ` | Check if nonce has been used |
166166
167167** Events:**
168168
169- | Event | When |
170- | -------| ------|
169+ | Event | When |
170+ | ------------------------------------------------- | ---------------------- |
171171| ` PaymentVerified(payer, server, nonce, minPrice) ` | Payment nonce recorded |
172172
173173## Deployed Addresses (Sepolia)
174174
175- | Contract | Address |
176- | ----------| ---------|
177- | MockUSDC | [ ` 0xc89e913676B034f8b38E49f7508803d1cDEC9F4f ` ] ( https://sepolia.etherscan.io/address/0xc89e913676B034f8b38E49f7508803d1cDEC9F4f ) |
178- | ConfidentialUSDC | [ ` 0xE944754aa70d4924dc5d8E57774CDf21Df5e592D ` ] ( https://sepolia.etherscan.io/address/0xE944754aa70d4924dc5d8E57774CDf21Df5e592D ) |
179- | X402PaymentVerifier | [ ` 0x4503A7aee235aBD10e6064BBa8E14235fdF041f4 ` ] ( https://sepolia.etherscan.io/address/0x4503A7aee235aBD10e6064BBa8E14235fdF041f4 ) |
175+ | Contract | Address |
176+ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
177+ | MockUSDC | [ ` 0xc89e913676B034f8b38E49f7508803d1cDEC9F4f ` ] ( https://sepolia.etherscan.io/address/0xc89e913676B034f8b38E49f7508803d1cDEC9F4f ) |
178+ | ConfidentialUSDC | [ ` 0xE944754aa70d4924dc5d8E57774CDf21Df5e592D ` ] ( https://sepolia.etherscan.io/address/0xE944754aa70d4924dc5d8E57774CDf21Df5e592D ) |
179+ | X402PaymentVerifier | [ ` 0x4503A7aee235aBD10e6064BBa8E14235fdF041f4 ` ] ( https://sepolia.etherscan.io/address/0x4503A7aee235aBD10e6064BBa8E14235fdF041f4 ) |
180180| AgenticCommerceProtocol | [ ` 0xBCA8d5ce6D57f36c7aF71954e9F7f86773a02F22 ` ] ( https://sepolia.etherscan.io/address/0xBCA8d5ce6D57f36c7aF71954e9F7f86773a02F22 ) |
181- | AgentIdentityRegistry | [ ` 0xf4609D5DB3153717827703C795acb00867b69567 ` ] ( https://sepolia.etherscan.io/address/0xf4609D5DB3153717827703C795acb00867b69567 ) |
181+ | AgentIdentityRegistry | [ ` 0xf4609D5DB3153717827703C795acb00867b69567 ` ] ( https://sepolia.etherscan.io/address/0xf4609D5DB3153717827703C795acb00867b69567 ) |
182182| AgentReputationRegistry | [ ` 0xd1Dd10990f317802c79077834c75742388959668 ` ] ( https://sepolia.etherscan.io/address/0xd1Dd10990f317802c79077834c75742388959668 ) |
183- | Treasury | ` 0xF505e2E71df58D7244189072008f25f6b6aaE5ae ` |
183+ | Treasury | ` 0xF505e2E71df58D7244189072008f25f6b6aaE5ae ` |
184184
185185All contracts verified on [ Etherscan] ( https://sepolia.etherscan.io ) .
186186
187187## Fee Structure
188188
189- | Operation | Fee | Notes |
190- | -----------| -----| -------|
191- | ** Wrap** (USDC to cUSDC) | max(0.1%, 0.01 USDC) | Plaintext fee deducted before minting |
192- | ** Transfer** (cUSDC to cUSDC) | ** FREE** | Encrypted peer-to-peer, no fee |
193- | ** Unwrap** (cUSDC to USDC) | max(0.1%, 0.01 USDC) | Fee deducted from decrypted cleartext |
189+ | Operation | Fee | Notes |
190+ | ----------------------------- | -------------------- | ------------------------------------- |
191+ | ** Wrap** (USDC to cUSDC) | max(0.1%, 0.01 USDC) | Plaintext fee deducted before minting |
192+ | ** Transfer** (cUSDC to cUSDC) | ** FREE** | Encrypted peer-to-peer, no fee |
193+ | ** Unwrap** (cUSDC to USDC) | max(0.1%, 0.01 USDC) | Fee deducted from decrypted cleartext |
194194
195195** Breakeven:** 10 USDC (below: flat 0.01 USDC fee; above: 0.1% scales with amount).
196196
197- | Amount | Wrap Fee | Transfer Fee | Unwrap Fee |
198- | --------| ---------- | -------------- | ------------ |
199- | 1 USDC | 0.01 | 0 | 0.01 |
200- | 10 USDC | 0.01 | 0 | 0.01 |
201- | 100 USDC | 0.10 | 0 | 0.10 |
202- | 1000 USDC | 1.00 | 0 | 1.00 |
197+ | Amount | Wrap Fee | Transfer Fee | Unwrap Fee |
198+ | --------- | -------- | ------------ | ---------- |
199+ | 1 USDC | 0.01 | 0 | 0.01 |
200+ | 10 USDC | 0.01 | 0 | 0.01 |
201+ | 100 USDC | 0.10 | 0 | 0.10 |
202+ | 1000 USDC | 1.00 | 0 | 1.00 |
203203
204204## SDK Usage
205205
@@ -256,15 +256,18 @@ import express from "express";
256256
257257const app = express ();
258258
259- app .use (" /api/premium" , fhePaywall ({
260- price: " 1000000" , // 1 USDC (6 decimals)
261- asset: " USDC" ,
262- tokenAddress: " 0xE944754aa70d4924dc5d8E57774CDf21Df5e592D" ,
263- verifierAddress: " 0x4503A7aee235aBD10e6064BBa8E14235fdF041f4" ,
264- recipientAddress: " 0x..." ,
265- rpcUrl: " https://sepolia.infura.io/v3/..." ,
266- minConfirmations: 1 ,
267- }));
259+ app .use (
260+ " /api/premium" ,
261+ fhePaywall ({
262+ price: " 1000000" , // 1 USDC (6 decimals)
263+ asset: " USDC" ,
264+ tokenAddress: " 0xE944754aa70d4924dc5d8E57774CDf21Df5e592D" ,
265+ verifierAddress: " 0x4503A7aee235aBD10e6064BBa8E14235fdF041f4" ,
266+ recipientAddress: " 0x..." ,
267+ rpcUrl: " https://sepolia.infura.io/v3/..." ,
268+ minConfirmations: 1 ,
269+ })
270+ );
268271
269272app .get (" /api/premium/data" , (req , res ) => {
270273 res .json ({ data: " premium content" , paidBy: req .paymentInfo ?.from });
@@ -491,10 +494,10 @@ marc-protocol/
491494
492495### Two Unbypassable Fee Streams
493496
494- | Stream | Rate | Trigger | Enforcement |
495- | --------| ------| ---------| -------------|
496- | ** Wrap/Unwrap Fee** | 0.1% (min $0.01) | USDC enters/exits encrypted layer | Contract-level (` accumulatedFees → treasury ` ) |
497- | ** ERC-8183 Job Escrow** | 1% platform fee | Job completion | Contract-level (` PLATFORM_FEE_BPS = 100 ` ) |
497+ | Stream | Rate | Trigger | Enforcement |
498+ | ----------------------- | ---------------- | --------------------------------- | --------------------------------------------- |
499+ | ** Wrap/Unwrap Fee** | 0.1% (min $0.01) | USDC enters/exits encrypted layer | Contract-level (` accumulatedFees → treasury ` ) |
500+ | ** ERC-8183 Job Escrow** | 1% platform fee | Job completion | Contract-level (` PLATFORM_FEE_BPS = 100 ` ) |
498501
499502** ERC-8183 Job Escrow, Primary Revenue:**
500503Agent creates job, funds locked in escrow, work delivered, evaluator approves. ** 99% to provider, 1% to protocol** . The 1% fee is enforced at the contract level, mathematically unbypassable.
@@ -503,13 +506,13 @@ Agent creates job, funds locked in escrow, work delivered, evaluator approves. *
503506
504507### Revenue Projections
505508
506- | Year | Scenario | Wrap/Unwrap Fee | Job Escrow (1%) | Enterprise | Total |
507- | ------| ----------| -- ---------------| ----------------- | -----------| -------|
508- | ** 2026** | Conservative | $24K | $3K | $0 | ** $27K** |
509- | ** 2026** | Base | $90K | $60K | $50K | ** $200K** |
510- | ** 2026** | Optimistic | $240K | $1.2M | $150K | ** $1.59M** |
511- | ** 2027** | Multi-Chain | $1M | $3M | $300K | ** $4.3M** |
512- | ** 2028+** | Mainstream | $5M | $15M | $1M | ** $21M** |
509+ | Year | Scenario | Wrap/Unwrap Fee | Job Escrow (1%) | Enterprise | Total |
510+ | --------- | ------------ | --------------- | --------------- | -- -------- | ---------- |
511+ | ** 2026** | Conservative | $24K | $3K | $0 | ** $27K** |
512+ | ** 2026** | Base | $90K | $60K | $50K | ** $200K** |
513+ | ** 2026** | Optimistic | $240K | $1.2M | $150K | ** $1.59M** |
514+ | ** 2027** | Multi-Chain | $1M | $3M | $300K | ** $4.3M** |
515+ | ** 2028+** | Mainstream | $5M | $15M | $1M | ** $21M** |
513516
514517Key insight: ** every new chain and VM that Zama deploys to multiplies MARC's addressable market.** x402 volume alone is $166M+ and growing. Combined with MCP, MPP, A2A, AgentKit, and other emerging protocols, the total agent payment market is much larger. MARC needs just 2-5% adoption for meaningful revenue.
515518
@@ -562,26 +565,35 @@ See [docs/SECURITY.md](docs/SECURITY.md) for the full threat model and audit his
562565## Roadmap
563566
564567### v1.0.0 (Current)
565- - 7 contracts: ConfidentialUSDC, X402PaymentVerifier, AgenticCommerceProtocol, AgentIdentityRegistry, AgentReputationRegistry, MARCTimelock, MockUSDC
566- - 10 framework plugins: x402, MCP, MPP, AgentKit, Virtuals GAME, OpenClaw
568+
569+ - 7 contracts deployed on Ethereum Sepolia
570+ - 10 framework plugins: x402, MCP, MPP, A2A, AgentKit, Virtuals GAME, OpenClaw, ElizaOS, LangChain, CrewAI
571+ - Single TX default (Zama operator pattern, payAndRecord atomic payments)
567572- SDK with fheFetch, fhePaywall, facilitator, ERC-8004/8183 helpers
568- - 900+ tests, deployed on Ethereum Sepolia
569- - The Graph subgraph, GitHub Actions CI/CD
573+ - 1100+ tests, GitHub Actions CI/CD, The Graph subgraph
570574
571575### v1.1 (Next)
576+
572577- Ethereum mainnet deployment
573- - Professional third-party audit
578+ - Professional third-party security audit
574579- UUPS proxy pattern for contract upgradeability
575580- Multisig treasury (Gnosis Safe)
581+ - Provider budget verification (FHE.allow for job budget transparency between parties)
576582- Gas benchmark report
577583
578584### v1.2
585+
579586- Multi-chain deployment: Base (#1 x402 volume), Arbitrum (largest L2 TVL)
580587- Multi-token factory (cWETH, cDAI confidential wrappers)
588+ - Encrypted agent-to-agent messaging via ECDH (private pricing negotiation using ERC-8004 public keys)
589+ - Configurable fee rates via governance
581590- Facilitator network (decentralized verification)
582591
583592### v2.0
593+
584594- Multi-VM expansion: Solana (SVM) via Zama's cross-VM roadmap
595+ - Cross-VM confidential transfers
596+ - Encrypted agent messaging across chains
585597- Wherever Zama deploys FHE, MARC follows
586598
587599## License
0 commit comments