{"license":"CC-BY-4.0","licenseUrl":"https://creativecommons.org/licenses/by/4.0/","attribution":"ChainChoice (https://chainchoice.io)","category":"relayers","evidenceReadAt":"2026-08-11","generatedAt":"2026-11-04","criteria":[{"id":"relayer_authority_and_key_custody","label":"What the relayer is authorised to do, and whether you can keep the address","weight":32},{"id":"exactly_once_execution","label":"Exactly-once execution and stuck-queue recovery","weight":26},{"id":"credential_blast_radius","label":"What a stolen API credential can do before anyone notices","weight":22},{"id":"gas_float_custody","label":"Where the gas float sits and how you get it back","weight":20}],"providers":{"gelato_relay":{"relayer_authority_and_key_custody":{"s":7,"q":"No vendor-generated key exists, so the portability half is moot; I verified the payer-only half on-chain, not from prose. eth_getCode at GelatoRelay1BalanceERC2771 0xd8253782c45a12053594b9deB72d8e8aB2Fca54c returns 4,791 bytes on Ethereum mainnet, Polygon, Sepolia, Base and Arbitrum (publicnode…","u":"https://docs.gelato.cloud/gasless-with-relay/additional-resources/migration-to-turbo-relayer/erc2771","stale":"2026-10-28"},"exactly_once_execution":{"s":4,"q":"Downgraded 6 to 4: the two knobs the draft credited do not exist in the current product. I fetched all 89 sitemap pages as raw markdown on 2026-08-11. \"the gas limit of the relay call. This effectively sets an upper price limit for the relay call\"","u":"https://docs.gelato.cloud/gasless-with-relay/relayer-api/overview","stale":"2026-10-28"},"credential_blast_radius":{"s":6,"q":"Two genuine server-side limits plus independent rotation; score unchanged at 6, but the draft's reasoning was rebuilt because its corpus was unreliable.","u":"https://docs.gelato.cloud/gasless-with-relay/how-to-guides/create-a-api-key","d":"2026-08-11","stale":"2026-10-28"},"gas_float_custody":{"s":2,"q":"Prefunded, vendor-held, single-chain, non-withdrawable; score 2 stands, one overreach corrected. The float is a Gas Tank: \"Since Gas Tank is deployed on Polygon, you can deposit USDC in one step, and deposits from other networks are supported via Circle CCTP\"","u":"https://docs.gelato.cloud/vrf/how-to-guides/deploy-your-contract-inheriting-gelato-vrf","d":"2026-08-11","stale":"2026-10-28"}},"circle_gas_station":{"relayer_authority_and_key_custody":{"s":6,"q":"Developer-controlled wallets use 2-of-2 MPC. You can let Circle host both nodes, share hosting with Circle, or host both nodes yourself. | This setup may be required in certain regulatory jurisdictions and is available to enterprise customers. | Circle offers a key backup and recovery tool.","u":"https://developers.circle.com/wallets/key-management","d":"2026-10-28"},"exactly_once_execution":{"s":7,"q":"Wait for pending transactions to be included on the blockchain before submitting new requests. EVM chains restrict the number of queued transactions per sender address. | to resubmit at the HIGH fee level. | before the transaction is mined. Cancellation also incurs gas fees.","u":"https://developers.circle.com/wallets/transaction-limits-and-optimizations","d":"2026-10-28"},"credential_blast_radius":{"s":6,"q":"this action allows you to prevent outgoing transactions from being broadcast. | Your allowlist will allow any transaction where the associated address has been added to your allowlist. | Compliance Engine on both testnet and mainnet is only available for eligible customers.","u":"https://developers.circle.com/wallets/compliance-engine/tx-screening-rule-management","d":"2026-10-28"},"gas_float_custody":{"s":8,"q":"As the policyholder, you are responsible for reimbursing Circle for all the gas fee sponsorships made on your behalf. | Invoices must be settled within seven days of being issued or up to $20 in additional Gas Station charges. | will result in the pausing of all gas station policies.","u":"https://developers.circle.com/wallets/gas-station/billing","d":"2026-10-28"}},"openzeppelin_relayer":{"relayer_authority_and_key_custody":{"s":10,"q":"OpenZeppelin Relayer supports the following signer types: | vault : HashiCorp Vault secret signer | vault_transit : HashiCorp Vault Transit signer | google_cloud_kms : Google Cloud KMS signer | aws_kms : Amazon AWS KMS signer | cdp : Coinbase Developer Platform signer","u":"https://docs.openzeppelin.com/relayer/configuration/signers","d":"2026-10-28"},"exactly_once_execution":{"s":6,"q":"Retrieves a transaction by its nonce value. | Deletes all pending transactions for a specific relayer. | Replaces a specific transaction with a new one. | Cancels a specific transaction by its ID.","u":"https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-relayer/refs/heads/main/openapi.json","d":"2026-10-28"},"credential_blast_radius":{"s":3,"q":"Raw policy JSON - will be validated against relayer's network type during application | \"bearer_auth\": { \"type\": \"http\", \"scheme\": \"bearer\" }","u":"https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-relayer/refs/heads/main/openapi.json","d":"2026-10-28"},"gas_float_custody":{"s":9,"q":"Minimum balance (in lamports, wei, or stroops) required for the relayer to operate. Optional. | For \"user\", RPC methods add an instruction to transfer SPL tokens (calculated from the current SOL price plus a configurable margin) from the user to the relayer, ensuring fees are sustainably covered in…","u":"https://docs.openzeppelin.com/relayer/configuration","d":"2026-10-28"}},"sequence_transactions_api":{"relayer_authority_and_key_custody":{"s":9,"q":"Sidekick creates a Sequence Smart Contract Wallet based on the BACKEND_WALLET_PV_KEY or AWS / GCP KMS signer you provide, this allows gas-sponsorship, batching and other optimizations.","u":"https://docs.sequence.xyz/solutions/infrastructure/sidekick/quickstart","d":"2026-10-28"},"exactly_once_execution":{"s":6,"q":"Fire + forget model — easily send transactions to the transactions api which will automatically manage nonces, bump gas, and other features which will ensure fast delivery | Optimal gas pricing for transactions — will be attempted once and if not included from the mempool within 3 blocks, the…","u":"https://docs.sequence.xyz/api-references/transactions/overview","d":"2026-10-28"},"credential_blast_radius":{"s":6,"q":"AddGasSponsor is a privileged write endpoint. Every request must include both headers: | The Admin API Secret Key is a privileged JWT credential. Only use it from a trusted backend — never expose it in a browser, mobile app, or public repository.","u":"https://docs.sequence.xyz/api-references/transactions/endpoints/add-gas-sponsor","d":"2026-10-28"},"gas_float_custody":{"s":7,"q":"Now, we are going to add a payment method via a credit card in order to fund the sponsorship. | Sponsoring gas is easy and works across all networks we support with a single balance. | We will automatically notify you if your balance falls below $5 and you have sponsored contracts.","u":"https://docs.sequence.xyz/solutions/builder/gas-sponsorship","d":"2026-10-28"}},"openfort_backend_wallets":{"relayer_authority_and_key_custody":{"s":9,"q":"Import existing wallets into Openfort by providing the private key. This enables you to migrate existing wallets or use keys generated elsewhere. | Export the private key from a backend account. This is useful for migrating to another provider or for backup purposes.","u":"https://www.openfort.io/docs/products/server/accounts","d":"2026-10-28"},"exactly_once_execution":{"s":4,"q":"For custodial and backend-wallet accounts the transaction is signed and broadcast in the same call | Omit to pay gas from the account's native token balance.","u":"https://www.openfort.io/docs/api-reference/transactions","d":"2026-10-28"},"credential_blast_radius":{"s":6,"q":"That hash is all the policy engine sees for a send, and it classifies it as signEvmHash with no transaction fields. | and that rule lets every send through. | To bound sends, pre-flight the exact call and only send when","u":"https://www.openfort.io/docs/configuration/policies","d":"2026-10-28"},"gas_float_custody":{"s":7,"q":"Each project has a credit balance. The credit balance is used to pay for the project's gas sponsorship. | Given that each project supports all chains, the credit balance is shared across all chains. | When your credit balance reaches zero, gas sponsorship is disabled for your project.","u":"https://www.openfort.io/docs/configuration/project-billing","d":"2026-10-28"}},"coinbase_cdp_server_wallets-relayer":{"relayer_authority_and_key_custody":{"s":9,"q":"Keys are never exposed outside the secure enclave during transfer. | Only individual private key import is supported. To import an HD wallet, derive individual keys from the seed and import them one at a time.","u":"https://docs.cdp.coinbase.com/wallets/using-wallets/import-and-export","d":"2026-10-28"},"exactly_once_execution":{"s":7,"q":"The original transaction fires a failed event because it will never land onchain. | Transaction stuck in mempool for more than 30 seconds | In the rare case that a transaction is still pending when the monitoring window expires (3 minutes for EVM, 2 minutes for Solana), no further events are fired.","u":"https://docs.cdp.coinbase.com/webhooks/wallets","d":"2026-10-28"},"credential_blast_radius":{"s":10,"q":"Policy Engine supports such restrictions that evaluate against transaction | This USD denominated amount includes native assets, | $ref: '#/components/schemas/EvmDataCriterion' | $ref: '#/components/schemas/NetUSDChangeCriterion'","u":"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/policy-engine/create-policy.md","d":"2026-10-28"},"gas_float_custody":{"s":8,"q":"CDP non-custodial wallets use a pay-as-you-go model with no contracts or minimum commitments. | Read operations are not billed. | Usage is billed at the beginning of each calendar month for the previous month.","u":"https://docs.cdp.coinbase.com/wallets/pricing","d":"2026-10-28"}},"privy_server_wallets":{"relayer_authority_and_key_custody":{"s":9,"q":"Wallets created server-side can only be exported via Privy's server-side SDKs or REST API. This ensures that wallets are securely exported in an encrypted interaction between your app's and Privy's infrastructure.","u":"https://docs.privy.io/wallets/wallets/export","d":"2026-10-28"},"exactly_once_execution":{"s":7,"q":"you can trigger a replacement transaction by submitting a new transaction with the same nonce as the still pending transaction. | Although you are sending a new transaction, there is no risk of both transactions getting executed (unintentionally) if the nonce is set to be the same in each.","u":"https://docs.privy.io/recipes/speeding-up-transactions","d":"2026-10-28"},"credential_blast_radius":{"s":9,"q":"Ethereum transaction-level fields that can be referenced in a policy condition. | The decoded calldata in a smart contract interaction as the smart contract method's parameters. | The verbatim Ethereum transaction object in an eth_signTransaction or eth_sendTransaction request.","u":"https://docs.privy.io/api-reference/policies/create.md","d":"2026-10-28"},"gas_float_custody":{"s":7,"q":"User pays — gas fees are covered using the wallet's USDC or USDT balance, with no ETH required. Your app's gas credits are not charged. | Postpaid accounts pay for sponsored gas through their monthly invoice.","u":"https://docs.privy.io/wallets/gas-and-asset-management/gas/overview","d":"2026-10-28"}}}}