Skip to main content
sendSponsoredTransaction bundles signing, relaying, and waiting into one call. When you need more control — pre-signing an intent to send later, relaying without blocking, or driving your own progress UI — split those steps with the functions below. The full flow is: signrelay (get a requestId) → poll status until the relay reports a transaction hash.
To have your backend decide what gets sponsored, sign on the client with signSponsoredTransaction and relay from your server. See EVM Server-Controlled Sponsorship.

signSponsoredTransaction

Signs an EIP-712 intent for a batch of calls without sending it. Returns a serializable payload you can hand to sendSponsoredTransaction or relaySponsoredTransaction later.

Parameters

Returns

Promise<SignedSponsoredTransaction>:

Custom validity window

relaySponsoredTransaction

Relays an intent to the sponsorship backend and returns a requestId without waiting for on-chain inclusion. Accepts either unsigned calls (it signs them for you) or a pre-signed signedTransaction.
The requestId — not a transaction hash — is the stable identifier for a sponsored transaction, because the relay may retry the on-chain submission. Use it to track status below.

Parameters

Same as signSponsoredTransaction (unsigned form), or { signedTransaction }.

Returns

Promise<{ requestId: string }>.

Tracking status

getEVMSponsoredTransactionStatus

Fetches the current relay state for a requestId. Use it as the building block for custom polling — for example, a progress indicator.
Returns Promise<SponsoredTransactionStatusResult>: The status lifecycle:

waitForSponsoredTransaction

For the common “wait until done” case, waitForSponsoredTransaction polls getEVMSponsoredTransactionStatus every 2 seconds and resolves as soon as the relay reports a transaction hash. It throws a SponsorTransactionError on a terminal failure or after a 60-second timeout.
Returns Promise<{ transactionHash: Hex }>.

generateSponsoredTransactionNonce

Generates a random bitmap nonce for signing an EIP-712 intent, validated against the on-chain isNonceUsed check on the delegation contract. signSponsoredTransaction calls this internally when no nonce is provided. Call it directly to get a nonce ahead of time. See Reusing a nonce.

Parameters

Returns

Promise<bigint>.

Reusing a nonce

By default, signSponsoredTransaction generates and validates a fresh single-use bitmap nonce for you via generateSponsoredTransactionNonce. Pass your own nonce to reuse one across intents, so at most one can ever land on-chain (cancel-replace), or to safely retry a signing request idempotently:
nonce works the same way on relaySponsoredTransaction and sendSponsoredTransaction.
Last modified on August 14, 2026