Smart Contracts
All Djinn contracts are deployed on Base as UUPS upgradeable proxies governed by a TimelockController (72-hour delay). Proxy addresses never change.
Network: Base Sepolia (testnet). These addresses will change when mainnet contracts are deployed. The proxy pattern means mainnet addresses will be permanent once set.
Governance
TimelockController: 0x37f41EFfa8492022afF48B9Ef725008963F14f79
All contract upgrades and configuration changes go through a 72-hour timelock. The deployer is the proposer; anyone can execute after the delay. Contracts have Pausable, UUPS upgradeToAndCall, and ReentrancyGuard.
USDC
Testnet (MockUSDC): 0x00e8293b05dbD3732EF3396ad1483E87e7265054
Mainnet (Circle USDC): 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Testnet uses a mintable MockUSDC for development. Mainnet will use Circle's official USDC on Base.
SignalCommitment
Stores encrypted signal blobs, commitment hashes, and signal metadata. Entry point for genius signal creation.
Address (Base Sepolia)
0x4712479Ba57c9ED40405607b2B18967B359209C0Key functions
commitSignal(bytes encryptedBlob, bytes32 commitHash, string sport, ...)cancelSignal(uint256 signalId)getSignal(uint256 signalId) viewEscrow
Holds idiot USDC deposits. Handles purchases, fee distribution, and buyer withdrawals.
Address (Base Sepolia)
0xb43BA175a6784973eB3825acF801Cd7920ac692aKey functions
deposit(uint256 amount)withdraw(uint256 amount)purchase(uint256 signalId, uint256 notional, uint256 odds)claimFees(address genius, address idiot)claimFeesBatch(address genius, address[] idiots)setOutcome(uint256 purchaseId, uint8 outcome)Collateral
Holds genius USDC collateral backing their SLA commitments. Slashed on negative settlement.
Address (Base Sepolia)
0x71F0a8c6BBFc4C83c5203807fAdd305B0C0F4C88Key functions
deposit(uint256 amount)withdraw(uint256 amount)deposits(address) viewlocked(address) viewAccount
Tracks genius-idiot pair cycles and purchase history for settlement grouping.
Address (Base Sepolia)
0x4546354Dd32a613B76Abf530F81c8359e7cE440BKey functions
recordOutcome(address genius, address idiot, ...)getPurchaseIds(address genius, address idiot) viewgetCurrentCycle(address genius, address idiot) viewAudit
Executes settlement: computes damages, slashes collateral, distributes refunds and credits.
Address (Base Sepolia)
0xCa7e642FE31BA83a7a857644E8894c1B93a2a44EKey functions
settleAuditSet(address genius, address idiot, int256 qualityScore, ...)finalizeAuditSet(address genius, address idiot)OutcomeVoting
Validator consensus mechanism. Collects quality score votes and triggers settlement at 2/3+ agreement.
Address (Base Sepolia)
0xAD534f4CAB13707BD4d65e4EF086A455e6A643e5Key functions
submitVote(address genius, address idiot, int256 qualityScore, uint256 totalNotional)addValidator(address validator)removeValidator(address validator)CreditLedger
Tracks non-transferable Djinn Credits (Tranche B damages). Credits discount future purchases.
Address (Base Sepolia)
0xA65296cd11B65629641499024AD905FAcAB64C3EKey functions
balanceOf(address) viewaward(address recipient, uint256 amount)consume(address buyer, uint256 amount)KeyRecovery
Allows buyers to recover signal decryption keys if they lose their local data.
Address (Base Sepolia)
0x496919DB9BC4590323cd019fE874311AC6116525Key functions
storeRecoveryBlob(uint256 signalId, bytes blob)getRecoveryBlob(uint256 signalId) viewIntegration
For programmatic interaction, use the REST API rather than calling contracts directly. The API handles multi-step orchestration (MPC, validator coordination, share distribution) that would be complex to replicate. Direct contract calls are suitable for read-only queries and custom indexing.
Full ABIs are available in the contracts/out directory of the repository.