Skip to content
Thenar

Contracts

Every contract this protocol has deployed on Monad Testnet, 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.

Deployed 12Superseded 3Held on chain 0.119000 MONReachable only here 2

Tasks, escrow, trajectories, policies and cap tables. Records a run and pays for it in one call, in MON. 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.

Monad Written for parallel execution: each operator's submit writes only its own shard of the slot counter, so two runs on one task do not touch the same storage and settle side by side in one block.

15,389 bytes0.079 MONcontracts/src/AxonProtocolV2.solused by /hub, /station, /task, /run, /leaderboard, /portfolio

Soulbound token naming a run's recorder. Conveys no rights over the data.

4,281 bytes0 MONcontracts/src/TrajectoryCertificate.solused by /contracts, /run

A running total of work recorded, in a shape wallets already read. Cannot be transferred, sold or redeemed.

1,567 bytes0 MONcontracts/src/ContributionRecord.solused by /contracts, /operator, /portfolio
Work recorded
0 CONTRIB

The corpus as shares. Only an operator admitted with a passkey can hold one; each paid run issues its share by score, and dividends from corpus sales pay whoever held at a record date fixed in advance.

6,401 bytes0 MONcontracts/src/CorpusShares.solused by /corpus-token, /station

Every corpus sale to an agent, with the sha256 of the bytes served, so a buyer can check its copy on chain.

Monad Kept in storage as well as emitted: Monad's public endpoints answer a log query only a hundred blocks wide, so a log that lived only in events could not be read back.

1,775 bytes0 MONcontracts/src/SalesLog.solused by /agents, /api/agent/sales

Pays MON for bringing someone who then does the work, not for signing up.

2,052 bytes0.01 MONcontracts/src/Referrals.solused by /portfolio, /contracts
Bounty per referral
0.002 MON
Claims the pot can still pay
5
Paid out
0 MON
Cap per referrer
10

A funded pot for task 1. Contributors enter themselves and it splits by work the protocol recorded.

2,258 bytes0.01 MONcontracts/src/PrizePool.solused by /contracts
Funds task
#1
Entrants
0
Total weight
0
Settled
not yet
Closes
2026-09-26

A MON treasury the protocol's contributors vote to spend on new tasks, weighted by work recorded.

4,271 bytes0.02 MONcontracts/src/Foundry.solused by /foundry, /contracts
Proposals
0
Voting period
72 h
Weight to propose
4000

ElGamal on secp256k1. Earnings add up on chain without the chain holding the number.

2,357 bytes0 MONcontracts/src/ConfidentialPayouts.solused by /contracts

Time-boxed read access to the corpus, paid in MON by the day. Sells time, not rights.

1,398 bytes0 MONcontracts/src/CorpusAccess.solused by /corpus, /api/dataset

The published shape of the corpus a licence buys.

2,044 bytes0 MONcontracts/src/CorpusManifest.solused by /corpus

Binds a secp256r1 public key to an address and verifies signatures through the P-256 precompile at 0x0100.

Monad Monad's P-256 precompile (EIP-7951) at 0x0100 checks a browser passkey's signature on chain.

1,814 bytes0 MONcontracts/src/PasskeyRegistry.solused by /passkey
Every write, and what it cost

Every transaction sent to the protocol contract, from Monadscan’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.

Monadscan needs an Etherscan API key, and this server has none. Set ETHERSCAN_API_KEY. Everything above is read straight from the node and is unaffected.

Superseded

Replaced the same day. A dividend declared while no share existed could never be paid or returned, and 0.01 MON declared that way during testing is still in it. The current CorpusShares can reclaim one.

on Monad Testnetcontracts/src/CorpusShares.sol

AxonProtocol v1 on Monad Testnet

0x89384f46e430F37DB61Afb98810eba995C0d6Ed4 →

The Monad Blitz Hyderabad deployment. Its runs are real, paid in MON, and verifiable on Monadscan.

on Monad Testnetcontracts/src/AxonProtocol.sol

AxonProtocolV2 on Avalanche Fuji

0x909d9318d602Cb4Ba84D2851Ab9BFf60DB7077C0 →

Where the product was built out between Blitz and the move back. Its runs are real, paid in AVAX, and verifiable on Snowtrace.

on Avalanche Fujicontracts/src/AxonProtocolV2.sol

Source for every entry is in this repository and verified on Sourcify as exact_match. 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.