Contracts
Every contract this protocol has deployed on Arc, what it does, and the surface that uses it. Addresses, code size, balances and the readings below are called at the moment this page is requested — nothing here is copied from a document.
ThenarProtocol
0xa8Ec6e8f33F5b5B980336a3cdd3BB799EEA38619 →Tasks, USDC escrow, trajectories, policies and licences. Records a run and pays for it in USDC in one call. submitTrajectoryFor is permissionless: anyone may pay the gas for someone else's run, because the verifier signature binds the task, the contributor, the hash and the score, so relaying moves who pays and forges nothing. createTaskWithAuthorization funds a task from a sponsor's EIP-3009 signature.
Arc Escrows Circle's native USDC at 0x3600…0000 and pulls a sponsor's funding with USDC's own receiveWithAuthorization, so a task can be funded by a signature and relayed with gas paid in the same USDC.
- Tasks
- 10
- Paid runs
- 4
- Policies
- 0
- Escrow cap per task
- 100 USDC
ThenarVerdicts
0xe3A583c613B075E61e18da4bFB82b94888721a8e →The verifier's public record: every paid run is written to Arc's ERC-8004 Reputation Registry against the verifier's agent id (tag runVerdict, value = score, feedbackHash = the run id).
Arc Writes to the ERC-8004 Identity and Reputation registries Circle deployed on Arc.
- Verifier agent (ERC-8004)
- #2427
- Verdicts
- 4
- Written to the Reputation Registry
- 4
- Mean verdict
- 87.78 / 100
TrajectoryCertificate
0x49082C4AB554003f9b517146a8265E208Ef5067B →Soulbound token naming a run's recorder. Conveys no rights over the data.
ContributionRecord
0x9e38cA5E04c8135e6676D2C6633f9cB5747bE578 →A running total of work recorded, in a shape wallets already read. Cannot be transferred, sold or redeemed.
- Work recorded
- 0 CONTRIB
CorpusShares
0x4E8f310ffc70C9DcaA64f5CaDb5F20a50cE8482d →The corpus as shares. Only an operator admitted with a passkey can hold one; each paid run issues its share by score, and USDC dividends from corpus sales pay whoever held at a record date fixed in advance.
Every corpus sale: x402, licence or Gateway, with the sha256 of the bytes served and the buyer's ERC-8004 agent id, so a buyer can check its copy on chain.
- Sales logged
- 3
CorpusManifest
0x9cAF33dEcfab291D63D451e934eae410a09B0012 →One Merkle root per task over every accepted episode, committed by the verifier, every version kept.
CorpusAudit
0x69b02DA6F64a2d5962Ef0b4710bAFd85D76e5bC0 →What the audit keeper found when it rebuilt each task's root from the episodes this server serves and compared it with CorpusManifest: matches, grown, short or altered.
ThenarCcipReceiver
0x9bC7A8F90e8B26ca1135358938A5542cD9334b92 →Corpus licences bought from Base or Ethereum: CCTP V2 burns the buyer's USDC to this contract, Chainlink CCIP carries the order, and it licenses the policy on the buyer's behalf.
Arc Arc's CCIP lane and CCTP domain 26: the dollars and the message arrive separately and are matched here.
- Licences bought over CCIP
- 0
- Awaiting the CCTP mint
- 0 USDC
- Held for buyers
- 0 USDC
PasskeyRegistry
0x3a9D0CA0029905dc32f8036BA28DFF33080AC254 →Binds a secp256r1 public key to an address and verifies signatures through the P-256 precompile at 0x0100.
Arc Arc's P-256 precompile (EIP-7951) at 0x0100 checks a browser passkey's signature on chain.
Every transaction sent to the protocol contract, from the Arc explorer’s index rather than from anything we store — including the ones that reverted, which a ledger of accepted runs by definition cannot show. The method is resolved from the selector against the deployed contract’s own compiler artifact rather than against the pruned ABI this interface calls — which is why submitTrajectoryFor and fundTask appear here by name. They are real functions of this contract that no page sends, made by scripts and other callers, and against the interface’s ABI they read as unrecognised selectors.
Arc's explorer returned 403 Everything above is read straight from the node and is unaffected.
The contracts Thenar calls but did not deploy: Circle’s USDC (the escrow and the gas), Arc’s Memo, the ERC-8004 registries, CCTP V2 and Gateway for moving USDC between chains, and Chainlink’s CCIP router. Deployment and current contract reads are shown here; completed flows and fork checks are documented separately. What each one does here →
- USDC (Circle)0x3600000000000000000000000000000000000000 →
- Memo (Arc)0x5294E9927c3306DcBaDb03fe70b92e01cCede505 →
- ERC-8004 IdentityRegistry0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 →
- ERC-8004 ReputationRegistry0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 →
- CCTP TokenMessengerV20x28b5a0e9C621a5BadaA536219b3a228C8168cf5d →
- CCTP MessageTransmitterV20x81D40F21F12A8F0E3252Bccb954D722d4c464B64 →
- Gateway GatewayWallet0x77777777Dcc4d5A8B6E418Fd04D8997ef11000eE →
- Gateway GatewayMinter0x2222222d7164433c4C09B0b0D809a9b52C04C205 →
- CCIP Router (Chainlink)0xB79791184973589c38e114D43Eb8E4588C283A18 →
Source for every entry is in this repository (contracts/src), verified on the Arc explorer at deployment. The ABI the app calls is generated from the compiler’s own artifacts by scripts/gen-abi.mjs, so it cannot describe a function the deployed contract does not have. /api/contract returns the protocol contract’s address, chain and full ABI.