Relayer
Gasless path inside clc-core. User signs, clc-core pays, tx lands as an EIP-7702 Calibur batch.
Base: /api/v2/relayer
| Method | Path | |
|---|---|---|
| GET | /health | relayer address (executor) + chain id |
| GET | /nonce/:address | EOA nonce (first-relay authorization) |
| GET | /calibur-nonce/:address | sequence for the root key |
| GET | /calibur-nonce/:address/:keyHash | sequence for a passkey |
| POST | /relay/preview | digest + resolved nonce |
| POST | /relay | submit signed batch |
| POST | /delegate | set code without calls |
| GET | /track/:trackingId | follow until mined |
| GET | /webauthn/challenge | passkey recovery |
| POST | /webauthn/recover | recover from passkey |
Flow
build calls → POST /relay/preview → sign digest → POST /relay → GET /track/:idEach call: { to, value, data }. Batch: { calls: [1..16], revertOnFailure }. Use revertOnFailure: true.
First relay for a wallet also sends the 7702 authorization (needs /nonce/:address). After that, only Calibur sequence numbers.
Passkey sign-in uses the WebAuthn assertion, not SIWE.
Gas limits: SETCODE_GAS_LIMIT / DELEGATE_GAS_LIMIT = 200000.
Details and viem examples: clc-core/docs/RELAYING.md.