Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.
저장소 README에서 가져옴
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.xyzREADME 전문 보기 ↗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. |