Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Paste an Arc address, sign nothing, get real mainnet USDC. The pot and every payment are on chain.
FinanceSolidity · JavaScriptGitHub @apexfaucet-hubOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
An AI agent that runs a real business's money on Arc, inside written limits: keyless accounting, a send gate on every transaction, a Circle Earn Kit guard, and honest records.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
An AI agent that runs a real business's money on Arc, inside written limits, several of them enforced in code.
Built for the Tameion Agents Hackathon (Canteen x Circle x Arc), RFB 04 "Autonomous Business Operator".
Live: https://apexfaucet.xyzRead the full README ↗An AI agent that runs a real business's money on Arc, inside written limits, several of them enforced in code.
Built for the Tameion Agents Hackathon (Canteen x Circle x Arc), RFB 04 "Autonomous Business Operator". Live: https://apexfaucet.xyz
mandate/), a send gate with 28 enforced senders, a recorder in every sender, and books reconciled every 2 hours (0 open alerts on 13 Oct).DECISIONS-2026-10-13.md (gas top-up by CCTP, books back to 0 open alerts, a wrong paid answer found, fixed and refunded, market measured before building).Everything we run on Arc mainnet lives in this one repository. Arc Mandate, first published as its own repo, is now in mandate/ with its history. G2 on Arc (built with Arc Studio, Circle's builder agent) is in g2/, with its own README.
| Contract | Address | Source here |
|---|---|---|
| USDC faucet (no withdraw function; money leaves only as claims) | 0x53fb2e89834050afaa9b3090a1fc9d1064615805 | contracts/ApexFaucetArc.sol |
| APEX token on Arc (9 decimals; only the migrator mints) | 0x59933f316417c89d9dc5107b30f08c99b774ea9d | contracts/ApexArc.sol (ApexArc) |
| APEX token faucet | 0x60075dc6f5f286fcf3579ff4b1500f328b8268f8 | contracts/ApexArc.sol (ApexArcFaucet) |
| APEX drip vault (no owner, no withdraw; weekly release to the token faucet) | 0x2d644a0aa8e821b31707228f23c387c84134049a | contracts/ApexArc.sol (ApexDripVault) |
| Arc Mandate: MandateFactory | 0x69e444f722666e13e171181efe054a93e0976b26 | mandate/src/MandateFactory.sol |
| Arc Mandate: MandateBox implementation (clones run this code) | 0xb380369c90918baaebadd48b26e2d12def74ef9b | mandate/src/MandateBox.sol |
| G2: ArcG2Registry (agent signals and paid questions checked against ERC-8004; 12 Oct) | 0xc8bd8a834f42ee8d7b7cce6ba2f774f9dc684a75 | g2/contracts/ArcG2Registry.sol |
The sources in contracts/ are the verified files, copied from Sourcify (solc 0.8.28, optimizer 200 runs, EVM paris). Check any of them yourself at https://sourcify.dev/server/v2/contract/5042/<address>.
APEX Faucet is a live business on Arc and X1: a free USDC faucet for people, and paid on-chain data for AI agents. It has one human founder. An AI agent (Claude) operates it day to day. It:
operator/buy-and-rate.js);claimed total).0x53fb2e89834050afaa9b3090a1fc9d1064615805), three times a day per person./etc/apex/send-gate.json, root-owned) puts per-payment and per-day caps on every value send on Arc and Base, and a fixed list of destinations on most of them: 28 senders on 13 Oct, all enforced.New, 7 Oct: Arc Mandate (now in mandate/), the same idea made on chain for anyone: a spending box with rules for AI agents. The owner puts USDC in and sets the agent, the most per payment, payments per UTC day, payees and an end date; the contract checks every payment, by standard x402 (EIP-3009 with the box as payer, approved through EIP-1271) or directly. No admin, no fee. Live at apexfaucet.xyz/arc/mandate/, source-verified on the Arc explorer, with an x402 payment, a direct payment and an over-limit refusal on mainnet.
The limits are in limits/LIMITS.md. The code that enforces them is below.
Our own tests had been green for weeks. On 8 Oct the operator stopped trusting them and paid every rail with the buyers' own software, from brand-new empty wallets (nothing can be charged), and changed the code where a buyer would have been refused:
network_mismatch): the router lowercased Solana's base58 network
id, and the verifier was handed the short name. Found with Coinbase's official @x402/svm; now refused only for lack of funds.operator/bsc-facilitator.js shows the pattern);
empty-wallet payments are refused as insufficient_funds and the operator's nonce does not move.GatewayClient.pay() from @circle-fin/x402-batching reaches Gateway on
Arc and on Base and is refused only as insufficient_balance (checks/check-gateway-official-client.js).@a2a-js/sdk 1.x sends SendMessage); both A2A 0.3 and 1.0 now answer.
The official MCP SDK connects to all three of our MCP servers.operator/sanctions.js: the OFAC SDN Ethereum list plus USDC's own isBlacklisted, fail closed).
The tests that found these are in checks/check-*-official-client.js (run by hand).GatewayClient.pay() (8 Oct).operator/cctp-base-to-arc.js (13 Oct): when the Arc operator ran low on gas (0.13 USDC, about a day of free faucet claims), the agent bridged 0.28 USDC of its own from Base to Arc itself: burn on Base 0xbbbca7cc…, mint on Arc 0x307ade9c…, about 20 minutes, through its own send-gate sender (own address only, 1 USDC a day). The Arc-to-Base direction is the hand tool behind it.arc-services/gas-widget.js (13 Oct): one line of HTML gives an app's new users 0.01 USDC on Arc mainnet from our faucet, free; the wallet only signs a challenge. https://apexfaucet.xyz/arc/gas-widget/x-guidance.operator/vault-guard.js);| Path | What it does |
|---|---|
accounting/lib, accounting/tools | The accounting layer: wallet registry, balance snapshots on 4 chains, verification, a ledger read from the senders' records, reconciliation of each balance change (by transaction hash, with fees and rent), alerts recorded in a summary, the readiness count, and the safety sweep that must pass before each cycle. It runs as its own user, with no keys and no network except an allowlisted proxy (account-run.src.sh). |
operator/ledger-log.js | The shared recorder: a sender records the native value that left each wallet (transfers, account rent, program escrow) from the transaction it built and signed. It never mirrors a wallet's history, because a copied history would "explain" a drain too. Reviewed on 29 Sep; six findings are open, and no sender uses it yet. |
operator/sweep-ledger-coverage.js | Fails the nightly check when a new sender file skips the recorder. It stops new files, not a new send added inside a file that is already listed. |
operator/deploy-gate.sh | Syntax check; refusal while the accounting cycle runs or within 10 minutes of it; a backup with a one-line undo; then a health check. |
operator/data-pass.js | The $5 card pass: the key is derived and never stored; one payment is one pass; refunds and disputes revoke it; a call we fail to answer is not charged. |
operator/prices.js | One price list for every payment rail and every public surface. |
operator/vault-guard.js, operator/park-float.js, operator/vault-check.js, tools/vault-board.js | Idle float with Circle Earn Kit. On-chain payout check (idle funds plus the vault's own withdraw market), a send gate that decodes every transaction, an exit rule, and a board of every Arc USDC vault. On 30 Sep no vault passed every rule (data/vault-board-2026-09-30.json): 22 failed the liquidity checks or carry Circle's own warnings; 2 passed the on-chain checks, but earn less than their gas at any size within our 5 USDC cap. |
operator/buy-and-rate.js | The purchase workflow (RFB 04: revenue in, pay for a service, record it). It spends at most last week's outside revenue. It buys one real x402 call from another Arc agent, proves the settlement of its own authorization on chain, grades delivery (not taste), and writes an ERC-8004 rating with a public receipt. |
First live run, 30 Sep: Argos Bot (#304) was paid 0.007 USDC, delivered, and rated 100. Three agents answered 402 to the official client's payment; nothing settled, so nothing was rated (reported to their maintainer). Reviewed by Fable: 7 must-fixes, all in.
0x53fb2e89834050afaa9b3090a1fc9d1064615805assert-sandboxed.js, sweep-account-safety.js), these copies read them from an unpublished config instead (accounting/secret-paths.example.json shows its shape).registry.js, extract.js and account-snapshot.js;account-exit-tests.js checks the founder's wallets by class instead of by address;npm install, then npm test. The test needs network access to Earn Kit's vault list, Morpho's public API and an Arc RPC.
MIT
| G2: ApexPublicGood (donations forwarded to the faucet in the same transaction; soulbound receipt; 12 Oct) | 0x42b80834a733e6930d75b80f72bfc6901311cbfd | g2/contracts/ApexPublicGood.sol |
operator/arc-send-gate.js, operator/send-gate.example.json |
| One gate every value sender on Arc and Base asks first: per-payment and per-day caps, a destination list checked on chain, a kill file, shadow then enforce, fail closed. |
operator/ledger-log-evm.js | The recorder for Arc and Base. It reads the value that left from the receipt (on Arc, the native USDC log), bounded by what the sender meant to move. More, or an asset it did not name, is not recorded, so the books alarm. |
operator/arc-gas-refill.js | Keeps the Arc operator's gas topped up from our own receive wallet, through the gate and the recorder, once per 24 hours, with a drain stop. |
operator/bsc-facilitator.js | x402 on BNB Smart Chain: USD1 and U by EIP-3009, signing domains proven on chain at boot, the payer's balance read before we spend gas, minimum $0.01. |
checks/arc-outflow-watch.js, checks/check-send-gate.js, checks/check-account-status.js, checks/check-fee-wallets.js | The alarms: money leaving to a stranger with no record, a gate refusal, the books stopping or finding something new, a gas wallet running low. |
accounting/lib/annotation-filter.js, accounting/tools/account-retract.js | Hand notes may never carry fees and may never overwrite each other; alerts created by a hand-run method error can be retracted only with a stored reason. |
tests/*.test.js | Planted faults for each control (the recorder replays real Arc transactions into a scratch ledger). |
tests/vault-guard.test.js | 45 checks: planted forbidden transactions (wrong receiver, stranger as beneficiary, permits, unlimited approvals, fees, exotic transaction types, non-read RPC methods, off-chain signing) must be refused, the legitimate shapes must pass, and three real vaults must be refused. Needs the network. |
checks/bundle-check.js | The method behind one of our paid checks, published deliberately: was this Arc launch bundled? It reads the launch transaction, the first two minutes of buys, and where each early buyer's USDC came from. It needs our Arc pool index and exit probe (not included) to run. |
operator/hand-gate.js | 7 Oct: the hand-run money tools (buyback, APEX sale, liquidity, CCTP Arc to Base, Solana to Arc relay) ask the send gate before they sign and record what they sent. Refused means exit 4 and nothing signed. |
accounting/tools/account-explain.js | 7 Oct: closes old, tiny unrecorded-outflow alerts by a recorded decision that says what they were (max $0.05 each, raised before a cutoff, inside the sandbox). It never writes ledger rows from chain history. |
operator/refund-base.js | 7 Oct: refunds a paid call we charged and did not deliver. The payer and amount are read from the payment transaction on chain; a double refund or more than 0.05 USDC is refused; the send asks the gate (sender base-refund). First use: a payment prober was charged $0.003 for a call that had no parameters and got a 400; refunded the same hour. |
checks/check-blank-paid-calls.js | 7 Oct: every paid endpoint must refuse a call that is missing its inputs BEFORE it takes money. The check fails when a blank paid call would be charged and then refused. |
checks/sweep-live-senders.js | 7 Oct: follows every running service, timer and cron line into the code it loads, and fails when a sender there can sign for a watched wallet and records nothing. |