Testnet: Base Sepolia. Not real money.

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)

0x4712479Ba57c9ED40405607b2B18967B359209C0

Key functions

commitSignal(bytes encryptedBlob, bytes32 commitHash, string sport, ...)cancelSignal(uint256 signalId)getSignal(uint256 signalId) view

Escrow

Holds idiot USDC deposits. Handles purchases, fee distribution, and buyer withdrawals.

Address (Base Sepolia)

0xb43BA175a6784973eB3825acF801Cd7920ac692a

Key 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)

0x71F0a8c6BBFc4C83c5203807fAdd305B0C0F4C88

Key functions

deposit(uint256 amount)withdraw(uint256 amount)deposits(address) viewlocked(address) view

Account

Tracks genius-idiot pair cycles and purchase history for settlement grouping.

Address (Base Sepolia)

0x4546354Dd32a613B76Abf530F81c8359e7cE440B

Key functions

recordOutcome(address genius, address idiot, ...)getPurchaseIds(address genius, address idiot) viewgetCurrentCycle(address genius, address idiot) view

Audit

Executes settlement: computes damages, slashes collateral, distributes refunds and credits.

Address (Base Sepolia)

0xCa7e642FE31BA83a7a857644E8894c1B93a2a44E

Key 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)

0xAD534f4CAB13707BD4d65e4EF086A455e6A643e5

Key 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)

0xA65296cd11B65629641499024AD905FAcAB64C3E

Key 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)

0x496919DB9BC4590323cd019fE874311AC6116525

Key functions

storeRecoveryBlob(uint256 signalId, bytes blob)getRecoveryBlob(uint256 signalId) view

Integration

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.