Deployed Contracts
Canonical address registry for every contract zkde.fi has deployed or interacts with. Addresses are grouped by network and verified against deployment artifacts and live configuration.
Live verification: zkde.fi/test
Network layout
flowchart LR
subgraph MAINNET["Starknet mainnet"]
RR["ReceiptRegistry"]
RA["ReceiptOS Archive"]
SD["SelectiveDisclosure"]
end
subgraph EXTERNAL["Mainnet protocols"]
EK["Ekubo DEX"]
VE["Vesu Lending"]
MI["MIST Chamber"]
SG["StarkGate Bridge"]
end
subgraph SEPOLIA["Starknet Sepolia"]
VC["VaultController + Adapters"]
AG["Agent system"]
VR["Verifiers"]
PP["Privacy pools"]
GOV["Governance"]
end
subgraph ETH["Ethereum Sepolia"]
EZ["EZKL Halo2Verifier"]
BR["L1→L2 Bridge"]
end
subgraph L3["Madara L3"]
FR["VerifiedFactRegistry"]
end- Starknet mainnet — ReceiptOS attestation layer and selective disclosure. The backend reads mainnet chain state for portfolio scanning and reputation scoring. Swaps execute on mainnet Ekubo through the user's own wallet.
- Starknet Sepolia — the full proof-gated execution pipeline. Vaults, adapters, verifiers, agent system, privacy pools, governance. This is the experimental infrastructure being brought to mainnet as PMF demand materialises.
- Ethereum Sepolia — EZKL KZG verifier and L1→L2 bridge sender.
- Madara L3 — dedicated appchain for proof fact registration.
Starknet mainnet
Our contracts
Deployed to mainnet. Confirmed via receiptos/integration/addresses.json (mainnet key) and frontend/.env.local (uses rpc.starknet.lava.build mainnet RPC + mainnet_receipts signer).
| Contract | Address | What it does |
|---|---|---|
| ReceiptRegistry | 0x048bfcab6cde939483a9a1f71ecadb1839bd4df9ae4d8fd3f4723fed0c8d4aac | Immutable receipt attestations — every portfolio operation and passport export gets a receipt written here |
| ReceiptOS Archive | 0x0092494273b46b26d5c7684d41e2fc5c15a3b24a56507e410f1b8ee33c3dabda | Permanent archive for receipt metadata and attestation history |
| SelectiveDisclosure | 0x06cd41594720f786dbe8f5d371c6d209db28013d8a55c58079838d7f6fe74811 | Prove properties about your data without revealing it — used by the compliance panel. Set in NEXT_PUBLIC_SELECTIVE_DISCLOSURE_ADDRESS |
How I verified these
receiptos/integration/addresses.jsonhas a"mainnet"key withreceipt_registry_v01andreceipt_archive_v01frontend/.env.localsetsRECEIPTOS_STARKNET_RPC=https://rpc.starknet.lava.build:443(mainnet) andSTARKNET_ACCOUNT=/root/.starkli-wallets/mainnet_receipts/account.jsonfrontend/.env.localand.env.productionboth setNEXT_PUBLIC_SELECTIVE_DISCLOSURE_ADDRESSto this address, and the backend default chain ID is0x534e5f4d41494e(SN_MAIN)
What the backend reads on mainnet
The backend talks to Starknet mainnet by default (config.py defaults to rpc.starknet.lava.build:443, chain ID SN_MAIN). These services scan mainnet to power /portfolio and /passport:
| Service | What it reads | Source |
|---|---|---|
position_scanner.py | Your wallet's token balances and DeFi positions across Ekubo, Vesu, staking | mainnet RPC |
reputation_scanner.py | On-chain activity, transaction history, protocol interactions | mainnet RPC |
onchain_activity_service.py | Vesu positions, StarkGate bridge activity, nonce | mainnet RPC |
cross_chain_fetcher.py | Cross-chain position data | mainnet RPC |
ekubo_config.py | Ekubo pool state, pricing, routes | mainnet RPC |
Mainnet token addresses
Hardcoded in frontend/src/components/portfolio/execution.ts:
| Token | Address |
|---|---|
| ETH | 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 |
| STRK | 0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d |
| USDC | 0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8 |
| WBTC | 0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac |
External protocols (mainnet)
Third-party contracts the system interacts with. These are not ours — they're the DeFi protocols we route through.
| Protocol | Address | Source in codebase |
|---|---|---|
| Ekubo Core | 0x00000005dd3D2F4429AF886cD1a3b08289DBcEa99A294197E9eB43b0e0325b4b | ekubo_config.py → EKUBO_CORE_MAINNET |
| Ekubo Router | 0x0199741822c2dc722f6f605204f35e56dbc23bceed54818168c4c49e4fb8737e | ekubo_config.py → EKUBO_ROUTER_MAINNET; execution.ts, privateExecutionWallet.ts |
| Vesu Lending | 0x00a84a2a04e4254e3b917afc7204d688c694b3e60e5e1c3c0e41c86cac42a87e | onchain_activity_service.py → VESU_CORE |
| StarkGate ETH Bridge | 0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82 | onchain_activity_service.py → STARKGATE_ETH_BRIDGE |
| MIST Cash Chamber | 0x06f8dcc500131b6be6b33f4534ec6d33df33e61083ec2b051555d52e75654444 | @mistcash/config → CHAMBER_ADDR_MAINNET; useMistPrivacy.ts |
Execution gates
Server-side mainnet execution is double-gated off by default. The rebalancer builds calldata and the user signs+submits through their own wallet directly. Server-side submission only activates with both flags:
| Gate | Default | Effect |
|---|---|---|
EXECUTOR_LIVE_SUBMIT_MAINNET | false | Backend won't submit transactions to mainnet |
EXECUTION_GATE_ALLOW_MAINNET_LIVE | false | Portfolio execution gate blocks mainnet live submission |
REBALANCER_SIGNER_PRIVATE_KEY | — | Required for server-side signing when gates are open |
RELAYER_DRY_RUN | true | Relayer defaults to dry-run mode |
Starknet Sepolia
Everything below is on Starknet Sepolia. These contracts are the proof-gated execution pipeline that will be brought to mainnet as demand grows. Deploy scripts use api.cartridge.gg/x/starknet/sepolia RPC.
Core contracts
| Contract | Address | Role |
|---|---|---|
| ProofGatedYieldAgent | 0x012ebbddae869fbcaee91ecaa936649cc0c75756583ae4ef6521742f963562b3 | The main agent contract — gates yield operations on proof validity |
| SelectiveDisclosure | 0x00ab6791e84e2d88bf2200c9e1c2fb1caed2eecf5f9ae2989acf1ed3d00a0c77 | Prove properties about data without revealing it (Sepolia copy) |
| ConfidentialTransfer | 0x07fdc7c21ab074e7e1afe57edfcb818be183ab49f4bf31f9bf86dd052afefaa4 | Private token transfers with commitment/nullifier scheme |
| SessionKeyManager | 0x01c0edf8ff269921d3840ccb954bbe6790bb21a2c09abcfe83ea14c682931d68 | Session key grants and revocations for autonomous mode |
| IntentCommitment | 0x062027ceceb088ac31aa14fe7e180994a025ccb446c2ed8394001e9275321f70 | Commit-reveal pattern for execution intents |
| ComplianceProfile | 0x05aa72977c1984b5c61aee55a185b9caed9e9e42b62f2891d71b4c4cc6b96d93 | On-chain compliance profile storage |
| ZkmlVerifier | 0x068abd64a4a78172a5ee15a30bbe614257d62482f07d3ff7fdb72da5aad08923 | Verifies zkML circuit outputs |
| GaragaVerifier | 0x06d0cb7a48b48c5b6ca70f856d249caccea90f506ad7596a6838502fe3aa6d37 | Groth16 pairing check in Cairo — the SNARK lane verifier |
| ConstraintReceipt | 0x04c8756f9baf927aa6a85e9b725dd854215f82c65bd70076012f02fec8497954 | Immutable receipts that an operation met its constraints |
Vault system + adapters
Deployed via scripts/deploy_vault_controller_system.py (Sepolia RPC). These form the proof-gated execution pipeline.
| Contract | Address | Role |
|---|---|---|
| VaultController (v3) | 0x2f29b985bc962f065160828296ab3889769a92a313d11077f186a81d0853b63 | Vault management — allocation, withdrawal, constraint enforcement |
| EkuboLpAdapter | 0x1f5e68f5470f2d316afdd057029438d950baa3dc59fc7060fd0a57ef88c4245 | Ekubo DEX LP — max 4000 bps |
| LendingAdapter | 0x2f76cf75ca90657b933686807884b3a1ffdc43347a9c5a053f2c2d108431357 | Lending protocol interactions — max 3500 bps |
| StakingAdapter | 0x66c048e79c11c5f3f94ad2a7f7cdd033e5cd5b5b3d207f6dd37cc22526edadf | Staking protocol interactions — max 2500 bps |
Deprecated adapters (wrong VaultController)
These were deployed 2026-03-05 against the old VaultController (0x6c5b17...). Replaced 2026-03-11.
| Contract | Address |
|---|---|
| EkuboLpAdapter v1 | 0x74febeff7301aa58d786b01756e36f20ab7208a52ce94a82b425af8f9933a0 |
| LendingAdapter v1 | 0x104f06b17e476bae294253ec1bba54dd4eaedd4f9d97468251fa6de62cfb90a |
| StakingAdapter v1 | 0x63b4f90d0f3373700e30624191651c2d2d301a11c544a463ffd66df320b85e3 |
Agent system
Deployed via scripts/deploy_agent_system.py (Sepolia RPC).
Reputation & governance
Privacy contracts
| Contract | Address |
|---|---|
| FullPrivacyPoolV2 | 0x03dde5617d362a6f9202cd3955b4508e2bd6b1c5d35250153beeb6237c811559 |
| FullyShieldedPool | 0x07fed6973cfc23b031c0476885ec87a401f1006bdc8ba58df2bd8611b38b5ff5 |
Ekubo Sepolia pools
Deployed via scripts/deploy_strkbtc_pools.py and deploy_zkd_pools.py (Sepolia RPC).
| Pool | Status |
|---|---|
| strkBTC/ETH | initialized |
| strkBTC/STRK | initialized |
| zkdAI/zkdETH | initialized |
| STRK/zkdETH | initialized |
| zkdAI/STRK | initialized |
| ETH/zkdETH | initialized |
| zkdAI/ETH | initialized |
Ethereum Sepolia
| Contract | Address | What it does |
|---|---|---|
| Halo2Verifier (EZKL KZG) | 0xF7b555ca4E54a8c7B9A0DDBFa17341575a852Ab9 | EZKL proof verification — the entry point of the SNARK lane on Ethereum |
| L1 EZKL Bridge Sender | 0x2a1b030f2835cB0ADC4ea271105e96da293853ab | Sends verified proof facts from L1 to L2 via Starknet messaging |
Madara L3
| Contract | Address | What it does |
|---|---|---|
| VerifiedFactRegistry | 0x5ed322b12ddc28d27b7797d79516ca285137f9bab9fde870191119b4c68d691 | Registers proof facts on the dedicated appchain — this is where pipeline receipts land |
Contract interaction topology
Proof-gated execution (Sepolia)
flowchart TD
User --> FE["Frontend"]
FE --> BE["Backend API"]
BE --> PG{"Generate proof"}
PG --> FR["ObsqraFactRegistry"]
FR --> VC["VaultController"]
VC --> V{"Verify proof"}
V -->|Valid| EX["Execute allocation"]
V -->|Invalid| REJ["Reject"]
EX --> RR["ReceiptRegistry"]
RR --> RCPT["Immutable receipt"]Portfolio execution (mainnet)
flowchart TD User --> FE["Frontend /portfolio"] FE --> BE["Backend API"] BE --> PS["position_scanner<br/>mainnet RPC"] PS --> REC["Build recommendation"] REC --> CD["Build Ekubo calldata"] CD --> FE2["Return to frontend"] FE2 --> W["User wallet signs"] W --> EK["Ekubo Router<br/>mainnet"] EK --> DONE["Receipt → ReceiptRegistry<br/>mainnet"]
Privacy vault (Sepolia)
flowchart LR DEP["Deposit"] --> FSP["FullyShieldedPool"] FSP --> MT["MerkleTree"] MT --> C["Store commitment"] WD["Withdraw"] --> HWP["HashedWithdrawPool"] HWP --> MT2["Verify merkle proof"] MT2 --> REL["Release funds"]
DAO governance (Sepolia)
flowchart TD
P["Proposer"] --> CREATE["Create proposal"]
CREATE --> DAO["DAOConstraintManager"]
V["Voter"] --> ZKP{"ZK vote proof"}
ZKP --> VOTE["Cast private vote"]
VOTE --> DAO
DAO --> TALLY["Tally"]
TALLY -->|Passed| EXEC["Execute"]
TALLY -->|Failed| ARCH["Archive"]
EXEC --> VC["Update VaultController"]Link here from other pages instead of duplicating contract tables. For the API surface and execution semantics, see API Reference. For the proving pipeline these contracts participate in, see Proof Pipeline.