— ⛽ — gwei
Recurring payments, native to the chain

Subscriptions that collect themselves.

A $5 monthly plan cannot survive where collecting it costs more than it earns. Here a charge costs the rounding error below — so a subscription can pull its own money, every period, with nobody clicking anything.

One charge — · a year of monthly billing — · gas paid in USDC

Send money with something to say

A payment carries a note on-chain, so the receipt explains itself later. Or turn it into a pay-link: the other side opens it, sees exactly what is being asked for, and pays in one tap.

Send a payment

A pay-link prefills this form for whoever opens it — share it anywhere, they pay in one tap.

One transaction, up to twenty wallets

Equal shares, a single confirmation, and a separate on-chain receipt for every recipient. Rounding dust comes back to you rather than being stranded in the contract.

Split a payment

One transaction, equal shares, rounding dust returns to you. Each recipient gets their own on-chain receipt event.

Payments you can take back

Inspired by Miden's P2IDR notes. Until the window closes the payment is still yours and you can cancel it; once it closes it is theirs to claim. The cure for sending to the wrong address.

Send a recallable payment

Your recallable payments

Connect & load — outgoing payments show a cancel countdown, incoming ones become claimable when it ends.

One transaction, two chains

A message leaves Arc through the Chainlink CCIP router, crosses a live lane, and runs code in a contract on the far side — where it is stored and emits an event you can read back below. The fee is paid in USDC, like everything else here.

Send a message across chains

Powered by Chainlink CCIP. Your message leaves Arc and is delivered to the chain shown below. The fee is paid in USDC, like everything else here.

— → — · via Chainlink CCIP
Fee: —
Delivery to Sepolia takes a few minutes while Chainlink's network finalizes it. Your message lands in the receiver contract, gets stored, and emits an event.

Messages on —

Read straight from your receiver contract — — every message that crossed from Arc and actually landed here.

Send a cross-chain message, wait a few minutes, then load — this proves it arrived and ran code on the other chain.

How this works

→ Your transaction calls the CCIP Router on Arc Testnet
→ Chainlink routes the message over the live Arc → Sepolia lane
→ It lands on Ethereum Sepolia and runs your receiver contract
→ The contract stores the message and emits an event
→ One transaction, two chains, real app-to-app messaging
Arc Router — · receiver — · fee paid in USDC.

A worker that bills for you

A tiny on-chain agent with its own wallet, living in this page. While it is online it watches the subscription contract and charges every due subscription by itself — no MetaMask prompt, no click, no human. It pays only transaction fees; the subscription money always moves subscriber → merchant directly and never touches the agent.

An agent with its own wallet that runs around the clock, off this page. It watches the subscription contract and collects every due payment by itself — no tab left open, no click, no human. It pays only transaction fees; the subscription money always moves subscriber → merchant directly and never touches the agent.

EVERY FEW MINUTESReads every subscription on the contract and picks out the ones that are due.
BEFORE PAYING GASChecks each subscriber's allowance and balance, and leaves out a charge that could only fail.
WHEN DUECollects the rest in batches. The money goes straight to the merchant.
Agent address
—
Gas balance
—
status—
transactions sent—
subscriptions on record—
due right now—
next due—
The agent's key never touches this page or any browser. Anyone may top up its gas; it can only ever spend that gas on collecting charges that are already due.
EVERY 15sReads the subscription table, picking up anything created since the last pass.
WHEN DUEBatches the due ones into a single charge, and retries individually if one reverts.
ON EMPTYSays so once and idles, instead of burning gas on a failing call every tick.
Agent address
—
Gas balance
—
agent offline
[boot] Agent terminal ready. Fund gas, press Start, and leave this tab open.
The burner key lives in this browser's local storage and nowhere else — that is why this feature is testnet-only and switches itself off on any other network.

Every payment, straight from the chain

Read out of the contract's own events and filtered to your address — nothing here comes from a server that could be wrong.

Your receipts

Connect your wallet and load — every Pay on Arc payment you sent or received, straight from the chain.

Recurring payments, settled on-chain

No money leaves your wallet up front. You approve USDC once, and each period is pulled only when it comes due — by the merchant, the billing agent or by you. Cancel in one transaction, any time, from either side.

Start a subscription

Funds never leave your wallet upfront. Your wallet first asks you to approve a capped amount — exactly the periods you picked above, never an unlimited allowance. Each period is pulled only when due. Cancel anytime — one click, on-chain. A subscription cannot be created to your own address, so the merchant must be a different wallet. Selling a plan? Put your own address in and copy it as a link instead — whoever opens it lands here with the form already filled. Pick 5 min if you want to watch the billing agent collect a period during a demo.

Paying out — subscriptions you fund

Nothing yetConnect your wallet and refresh to see what you are paying for.

Getting paid — people subscribed to you

No subscribers yetShare your address with a plan label and they will show up here.

A due charge can be triggered by anyone — that is what makes it automatable. Leave the auto-collector on and this tab bills for you; hand the job to the billing agent and you can close the tab entirely.

A treasury that rebalances itself

It holds USDC and EURC and tries to keep a fixed split of value between them. Every EUR/USD tick moves that split, so the agent reads the Pyth feed and — once drift breaks the band — pays any keeper a bonus to settle it back on-chain.

Treasury agent — reads Pyth, holds the mix

The treasury holds two stablecoins — USDC and EURC — and tries to keep a fixed value split between them. Every EUR/USD tick shifts that split, so the agent reads the Pyth EUR/USD feed and, when the mix drifts out of band, lets any keeper settle it back on-chain. Live oracle on Arc.
Pyth oracle→ Treasury agent→ USDC ⇄ EURC
— EUR / USD · tap refresh
Feed 0xa995…c30b · read from the Pyth contract on Arc, with the signed off-chain update pulled through this site's own endpoint.

Treasury health

USDC balance—
EURC balance—
— / —
Target mix—
Current drift—
connect & check

Fund & rebalance

A ratio needs both sides, so seed the treasury with USDC and EURC. Then anyone can be the keeper: supply the short side, receive the other plus a small bonus — that incentive is what makes the agent run without a babysitter.
Rebalance pulls a fresh Pyth update on-chain (tiny USDC gas fee), refuses if confidence is too wide, and only moves funds when drift breaks the band. Agent — · Pyth —.