Smart Contracts
These are Djinn's current Base Sepolia testnet contract addresses. They are UUPS upgradeable proxies governed by a TimelockController with a 72-hour delay, but the addresses below are not the future mainnet addresses.
Mainnet status: Not deployed yet. When Base mainnet contracts are announced, those proxy addresses are intended to remain stable while implementation logic upgrades through the timelock.
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)
TestnetKey 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)
TestnetKey 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)
TestnetKey functions
deposit(uint256 amount)withdraw(uint256 amount)deposits(address) viewlocked(address) viewAccount
Tracks genius-idiot pair purchases in an append-only queue for settlement grouping.
Address (Base Sepolia)
TestnetKey functions
recordOutcome(address genius, address idiot, ...)getQueueState(address genius, address idiot) viewgetPairPurchaseIds(address genius, address idiot) viewgetAuditBatchCount(address genius, address idiot) viewgetCurrentCycle(address genius, address idiot) viewAudit
Executes settlement: computes damages, slashes collateral, distributes refunds and credits.
Address (Base Sepolia)
TestnetKey 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)
TestnetKey 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)
TestnetKey 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)
TestnetKey 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.