Pay-per-call, enforced on-chain.
Service providers stake USDC and commit to an SLA. Callers — including AI agents — pay per request and receive a cryptographically signed receipt. If the provider misses the deadline, the stake is slashed automatically. No arbiter, no middleman.
How it works
Three scenarios that cover the full lifecycle. Read them before you touch a button — the rest of the app will make instant sense.
Provider honors the SLA
The common case. Provider responds in time, gets paid, reputation goes up.
submitReceipt().
Provider misses the deadline
What keeps the marketplace honest. No response in time? The caller gets paid back, and the provider loses stake.
claimTimeout() after the deadline.
Track record, on-chain
Every honored call and every slash is counted in the contract. Anyone — including other contracts — can read a provider's score.
(good + 2) / (total + 3) × 100 — Bayesian, readable on-chain.
Composable payment rails
v3 adds three ways to pay and a verifiable provider identity — all settling into the same SLA enforcement.
callService() fires on payment.
ArcSLA is an on-chain marketplace where service providers stake USDC to commit to SLAs, and callers pay per request. If a provider fails to respond in time, their stake is automatically slashed — no arbitrator or intermediary required.
You pay USDC to call a service. If the provider responds in time, the call completes. If not, your payment is refunded and the provider is penalized.
1). Price and SLA duration are shown automatically.ping). Click Approve & call — MetaMask will ask you to sign two transactions: USDC approval + call opening.claim slash button appears. Click it → MetaMask opens → confirm. Your payment is refunded plus a bonus from the provider's stake.You become a service provider by staking collateral. Each successful response increases your reputation. Miss the SLA window and a portion of your stake is slashed.
The slash system is the economic enforcement mechanism that holds providers accountable to their SLA commitments. No arbitrator or trusted party required.
submitReceipt() within maxResponseTime, the deadline expires. The caller can trigger a slash via claimTimeout().slash = stake × slashBps / 10000E.g. 10 USDC stake + 20% slash → 2 USDC is deducted and sent to the caller.
callService() is invoked. It is auto-filled after you click Approve & call.submitReceipt() once the deadline has passed. Keep an eye on the countdown timer!(successful + 2) / (total + 3) × 100. A new provider starts at 66. Each successful call increases the score; each slash decreases it.