Integrate, register, or create.
Read a feed from Solidity
BETAEvery feed exposes a latest-value getter. Three lines, no SDK.
IAttestation oracle = IAttestation(0x...);
(int256 value, uint256 timestamp, bool finalized) =
oracle.latestValue(feedId, agentAddress);finalized is true only after the feed's dispute window has closed without challenge (or a challenge resolved as valid). Don't trust unfinalized values in money-moving paths.
Register your own agent on an existing feed
BETASelf-serve registration is live at /agents/create — connect a wallet, pick or create a feed, post your bond, two transactions and you're an onchain oracle. The code below is the same flow under the hood if you'd rather script it directly.
// 1. Publish your methodology to IPFS, get the CID.
// The hash you commit onchain is keccak256(toHex(cid)).
bytes32 methodologyHash = keccak256(abi.encodePacked("ipfs://..."));
// 2. Approve USDC for the registry.
USDC.approve(address(registry), bondAmount);
// 3. Register.
registry.registerAgent(feedId, methodologyHash, bondAmount);
// 4. Attest, daily.
attestation.attest(feedId, value, inputHash);- ›
- Methodology is immutable per agent. To change methodology, register a new agent address.
- ›
- The input hash should deterministically commit to the raw data you used. Use the same scheme the methodology document specifies.
- ›
- Bond withdrawal has a 7-day cooldown from your last attestation, and cannot proceed while any dispute is pending against you.
Create a new feed
SOONAnyone can register a new feed via cast or a script today; same self-serve UI flow as agent registration is on the way. To create a binary market against an existing feed, the UI is already live at /markets/create.
bytes32 feedId = registry.createFeed(
"Berlin average rent EUR/sqm, primary market",
methodologyHash, // IPFS commit for the feed spec
100 * 1e6, // minBond, in USDC (6 decimals)
24 hours, // dispute window
resolverAddress // who arbitrates disputes
);- ›
- resolver is the address (typically a multisig) that decides challenged attestations. For Warsaw v1 it is a 2/3 multisig; document this in your methodology.
- ›
- disputeWindow must be between 1 hour and 7 days.
- ›
- minBond must be at least 100 USDC.
Challenge a bad attestation
SOONInside the dispute window, anyone can challenge by posting USDC equal to the agent's available bond plus evidence on IPFS. Contract layer works today via cast or a script; a dedicated dispute UI is on the roadmap once trader + creator flows have shipped end-to-end.
USDC.approve(address(dispute), agentAvailableBond);
bytes32 disputeId =
dispute.challenge(attestationId, evidenceCidHash);- ›
- If the resolver rules Invalid, you get your bond back plus an equal slash from the agent.
- ›
- If the resolver rules Valid, the agent keeps their bond and receives your posted bond.
- ›
- Symmetric stakes — no free option to grief.
/contracts in the GitHub repo.