Skip to main content

General Questions

ERC-4337 is an account abstraction standard that works without protocol changes. It introduces UserOperations, bundlers, and paymasters to enable smart account features.EIP-7702 is a protocol-level upgrade (requires hard fork) that allows EOAs to temporarily become smart accounts for a transaction.They work together: EIP-7702 can upgrade an EOA to a smart account, which then uses ERC-4337 infrastructure (bundler, paymaster).
  • Gelato SDK: Best for quick start and when using Kernel, Safe, OKX, or Trust accounts
  • Permissionless.js: Best for Alchemy, Biconomy, Thirdweb accounts or when you need multi-account support
  • Viem: Best for Coinbase Smart Wallet or when you need maximum control
  • Direct API: Best for non-JavaScript backends or custom implementations
See the comparison table for more details.
  • Kernel: Most flexible, supports all integration methods and EIP-7702
  • Safe: Battle-tested, widely adopted, great for multi-sig
  • Coinbase: Native integration with Coinbase ecosystem
  • Alchemy/Biconomy/Thirdweb: Use if you’re already in their ecosystem
See the smart account comparison for details.

Payment & Gas

With sponsored gas, your dApp pays for users’ gas fees using your Gas Tank balance. Users can transact without holding any native tokens.
  1. Fund your Gas Tank in the Gelato App
  2. Create a sponsor API key
  3. Use sponsored(sponsorApiKey) as the payment method
See Sponsor Gas for implementation details.
Gelato supports various ERC-20 tokens for gas payment including USDC, USDT, and other stablecoins. The supported tokens vary by network.Check the full list: ERC-20 Payment Tokens
Sponsoring costs the actual gas fees plus Gelato’s service fee. Gas costs vary by:
  • Network (Ethereum mainnet vs L2s)
  • Transaction complexity
  • Network congestion
Use gas estimation to predict costs:
const estimate = await smartWalletClient.estimate({
  payment: sponsored(sponsorApiKey),
  calls: [...],
});
console.log(`Estimated fee: ${formatEther(estimate.fee.amount)} ETH`);
Yes! You can dynamically choose payment methods based on your use case:
// Sponsor for onboarding
const payment = isNewUser
  ? sponsored(sponsorApiKey)
  : native();

const response = await smartWalletClient.execute({
  payment,
  calls: [...],
});

Technical Questions

Gelato supports 50+ networks including:
  • Ethereum Mainnet & Testnets
  • Arbitrum, Optimism, Base
  • Polygon, BNB Chain
  • And many more L2s
Check the full list: Supported Networks
Transaction speed depends on:
  • Network: L2s are typically faster than mainnet
  • Block time: Each chain has different block times
  • Bundler submission: Gelato submits as soon as possible
On most L2s, expect confirmation within a few seconds. On Ethereum mainnet, expect 12-15 seconds per block.
You can batch multiple calls in a single transaction. The limit depends on:
  • Gas limits of the target network
  • Complexity of each call
In practice, most use cases work well with 10-20 batched calls. For larger batches, consider splitting into multiple transactions.
const response = await smartWalletClient.execute({
  payment: sponsored(sponsorApiKey),
  calls: [
    { to: addr1, data: data1, value: 0n },
    { to: addr2, data: data2, value: 0n },
    // ... more calls
  ],
});
Yes! You can call any smart contract through the bundler. The calls array accepts any valid contract interaction:
import { encodeFunctionData } from "viem";

const callData = encodeFunctionData({
  abi: yourContractAbi,
  functionName: "yourFunction",
  args: [arg1, arg2],
});

const response = await smartWalletClient.execute({
  payment: sponsored(sponsorApiKey),
  calls: [
    {
      to: yourContractAddress,
      data: callData,
      value: 0n,
    },
  ],
});
Common reasons:
  1. Insufficient Gas Tank balance - Top up at Gelato App
  2. Invalid API key - Verify key includes target network
  3. Contract reverted - Check your calldata and target contract
  4. Account not deployed - First transaction deploys the account
See Troubleshooting for detailed solutions.

Account Management

All smart accounts have a counterfactual address that’s known before deployment:
const account = await kernel({
  owner,
  client,
});

// This address is valid even before the first transaction
console.log("Account address:", account.address);
The smart account is deployed automatically with the first transaction. The bundler handles deployment + your first call in a single operation. Deployment costs are included in the first transaction’s gas.
Recovery options depend on your smart account provider:
  • Safe: Built-in recovery modules
  • Kernel: Supports recovery modules
  • Others: Check provider documentation
Recovery is not a Gelato feature - it’s implemented at the smart account level.

Getting Help

Additional Resources