尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.xyz檢視完整 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. |