Live on Arc Testnet · Chain 5042002

You paid for a month.
You used 3 days.

TrustFlow is per-second USDC subscription billing on Arc.A subscriber deposits a buffer, the balance drains to the merchant every second it's used, and cancelling instantly refunds whatever wasn't consumed — no support ticket, no waiting, no rounding. The subscriber can be a person or an autonomous agent.

stream · 0x7A3f…9E2c → 0xC8B1…44aA
LIVE
Streamed this session
0.000000USDC
Rate: $9.00 / moElapsed: 00:00Gas/tick: $0.01
00:00 · init+ allowance
00:00 · deposit+ 2.10

Cancel on day 3. Get day 4–30 back.

Every subscription you've ever cancelled early paid the provider for time they never delivered. TrustFlow makes that impossible — usage is tracked to the second, and the contract enforces the refund automatically.

Criterion
Traditional processors
TrustFlow on Arc
Cancel day 3 of 30what do you get back?
Nothing
27 days, instant
Refund speedtime to wallet
5-10 biz days
< 1 second
Usage trackingbilling resolution
Monthly cycle
Per-second
Transaction feeper charge
2.9% + $0.30
~$0.01 gas
Chargeback riskmerchant exposure
$20 fee + reversal
Impossible

How the refund actually works.

Every operation is onchain on Arc. Usage is computed from (rate × elapsed) — no off-chain scheduler, no batch window, no support queue. Cancel anytime and the contract does the math.

STEP / 01

Merchant defines the plan.

Set the rate, grace period, and cancellation terms. The plan lives as a single onchain record anyone can subscribe to.

// one transaction, one source of truth
PlanRegistry.createPlan({
  name:      "Pro API",
  rate:      9_000000, // $9/mo in 6-dec USDC
  grace:     86400,   // 1 day
  dispute:   "agent+panel"
})
STEP / 02

Subscriber opens a stream.

Approve a bounded USDC allowance. Deposit a small buffer (1 week is typical). The stream begins ticking in the same block.

// 2 txs · ~$0.02 total gas on Arc
USDC.approve(streamManager, buffer)
StreamManager.createStream(planId, buffer)
// → streamId · status: STREAMING
STEP / 03

Value flows, per second.

No cron job. No off-chain scheduler. Consumed balance is computed on-demand from (rate × elapsed). Merchant can claim accrued revenue anytime.

// merchant claims what's earned so far
StreamManager.claim(streamId)
// → transfers accrued USDC to merchant
// → stream continues uninterrupted
STEP / 04

Cancel. Refund. Sub-second.

Subscriber hits cancel. Unused buffer returns to their wallet in the same transaction. Arc's deterministic finality means the refund is final before the next heartbeat.

// one call · final in < 1 second
StreamManager.cancel(streamId)
// → consumed stays with merchant
// → unused returns to subscriber

Agents can't hold credit cards. They can hold a stream.

Autonomous agents buy APIs, compute, and data continuously. Prepaid credits strand capital; per-request payments (x402) can't meter a six-hour job or a live feed. TrustFlow is the continuous counterpart — a stream an agent opens, funds, and cancels itself, with no human in the loop.

AGENT / 01

Runs its own lifecycle.

Opens a stream, watches its runway, tops up before it expires, and cancels when the job is done. One human funds the wallet once; the agent signs everything after.

// the agent, unattended
while (working) {
  runway = getBalance(streamId)
  if (runway < floor) topUp(streamId)
}
cancel(streamId) // refund is instant
AGENT / 02

Spends within a Circle policy.

The wallet is a Circle Agent Wallet. MPC key shares never touch the agent, and every transfer is bounded by the policy you set — that policy is the budget you hand it.

// key never enters the agent
circle wallet execute \
  "createStream(uint256,uint128)" \
  planId buffer // policy-checked, then signed
AGENT / 03

Has recourse, on its own.

If service degrades, the agent freezes payment and commits evidence onchain — a chargeback without a card network. It doesn't need a human to notice. The agent only opens the case: an arbitrator settles it, or the subscriber wins by default if the merchant never responds.

// bad service? freeze + escalate
DisputeResolver.openDispute(streamId, amt)
// → funds frozen onchain
// → merchant has 7 days to respond
// → arbitrator settles, or subscriber wins by default

Gate any endpoint. One request.

Drop this into any backend. Returns active: true when the caller has a live stream. No SDK. No webhook setup. No auth server.

curl · terminal
HTTP/1.1
$ curl https://trustflowonarc.vercel.app/api/check \
    -d "planId=42" \
    -d "address=0xC8B1...44aA"

# ← response
{
  "active": true,
  "streamId": "0x3e…b7",
  "rate": "9000000", // per month
  "consumed": "412336",
  "remaining": "8587664",
  "canceledAt": null
}
Testnet
Live on Arc · Chain 5042002
< 1s
Cancel → refund speed
$0.01
Cost per stream op
Open
Source · MIT licensed

Fair billing,
enforced by code.

No policy. No support ticket. No waiting period. The contract refunds exactly what wasn't used — the moment you cancel.