Inference. Now onchain.
Mint, trade, send or activate OBOL, the credit for inference on Robinhood Chain.
Say hello to the OBOL.
A credit you can mint, trade, send or activate.
Held onchain, ready for people, agents and apps.
1 OBOL = $1 of inference on any model OpenRouter serves
Usage is metered at each model's OpenRouter list price.
Owning and activating OBOL happens onchain. The models run on OpenRouter through the Pontica gateway.
One credit. A market around it.
Swipe to follow the flow
Nothing on chain turns OBOL back into USDG. The USDG paid for it goes to the treasury, which pays OpenRouter for the inference.
Built for agents. Used through code.
Get OBOL, activate it, sign once, send a request. No dashboard in the agent's path.
Buy and activate in one call.
Quote the book and the mint together, approve exactly the USDG you spend, then buy and activate for the agent's own wallet in one transaction. Whatever the book cannot beat is minted at $1.
Read the full example Illustrativeimport { createPublicClient, createWalletClient, http, parseUnits, zeroAddress } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
// EXCHANGE and USDG: the addresses at pontica.gg/protocol/agents#contracts
const chain = { id: 4663, name: 'Robinhood Chain', nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } } };
const abi = (name) => fetch(`https://pontica.gg/protocol/abi/${name}.json`).then((r) => r.json());
const [exchangeAbi, erc20Abi] = await Promise.all([abi('exchange'), abi('erc20')]);
const account = privateKeyToAccount(process.env.AGENT_KEY);
const pub = createPublicClient({ chain, transport: http() });
const wallet = createWalletClient({ account, chain, transport: http() });
const usdgIn = parseUnits('20', 6); // USDG and OBOL both have 6 decimals
const [book, mintOut] = await pub.readContract({ address: EXCHANGE, abi: exchangeAbi,
functionName: 'getActivationQuote', args: [usdgIn, 64n, true] });
const minCreditOut = ((book.creditOut + mintOut) * 995n) / 1000n; // other buys may land first
const approve = await wallet.writeContract({ address: USDG, abi: erc20Abi,
functionName: 'approve', args: [EXCHANGE, usdgIn] });
await pub.waitForTransactionReceipt({ hash: approve });
await wallet.writeContract({ address: EXCHANGE, abi: exchangeAbi, functionName: 'buyAndActivateWith', args: [
{ usdgIn, minCreditOut, recipient: account.address, maxFills: 64n, mintRemainder: true, referrer: zeroAddress },
account.address,
] });
Sign once for a key.
The key belongs to the wallet that signs. The message is plain Sign-In with Ethereum text, valid for ten minutes. The key comes back once; a new one retires the old.
Read the full example Illustrative// the exact text the gateway accepts: one use, ten minutes at most
const iso = (d) => d.toISOString().replace(/\.\d{3}Z$/, 'Z');
const issuedAt = new Date();
const expires = new Date(issuedAt.getTime() + 10 * 60 * 1000);
const nonce = [...crypto.getRandomValues(new Uint8Array(8))].map((b) => b.toString(16).padStart(2, '0')).join('');
const message = [
'pontica.gg wants you to sign in with your Ethereum account:',
account.address, // the EIP-55 checksum form
'',
'Issue a Pontica API key for this wallet. This retires any key it already has.',
'',
'URI: https://pontica.gg',
'Version: 1',
'Chain ID: 4663',
`Nonce: ${nonce}`,
`Issued At: ${iso(issuedAt)}`,
`Expiration Time: ${iso(expires)}`,
].join('\n');
const signature = await wallet.signMessage({ message }); // personal_sign over the UTF-8 bytes
const res = await fetch('https://pontica.gg/api/v1/keys', {
method: 'POST', headers: { 'content-type': 'application/json' },
body: JSON.stringify({ address: account.address, message, signature }),
});
const { key, hash, remaining_usd } = await res.json(); // 201: the only time the key is shown
Call any model.
One OpenAI compatible endpoint for every model OpenRouter serves. Each request draws on the wallet's API balance at the model's list price.
Read the full example Illustrativecurl https://pontica.gg/api/v1/chat/completions \
-H "Authorization: Bearer $PONTICA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{ "role": "user", "content": "Plan the next task in three steps." }],
"stream": true
}'
Inference is the new grain.
Fuel agents can trade
Inference turns ideas into code, research and finished work. OBOL makes that fuel something you can mint, list, buy, send or put to use.
Agents that refuel themselves
An agent can buy OBOL, activate it for its own wallet and sign for a key, with no person at a checkout in between.
Projects funded in inference
AI Funding lets anyone back an agent or an open AI project in OBOL, with a goal, a deadline, refunds if it misses and a daily allowance.
See AI Funding- OBOL supply
- Activated, all time
- Book depth
- Raised in AI Funding