Sponsor gas for your users
Sponsoring gas for users is one of the most effective ways to enhance the user experience in dApps. With the Gelato Smart Wallet SDK, developers can easily set up sponsored transactions for their applications in just a few simple steps, enabling seamless onboarding and interaction without requiring users to hold native tokens.
Steps
1. Import required dependencies
import { createGelatoSmartWalletClient, sponsored } from "@gelatonetwork/smartwallet";
import { gelato, kernel, safe } from "@gelatonetwork/smartwallet/accounts";
import { createWalletClient, createPublicClient, http, type Hex } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
2. Setup Smart Account
You can set up a Smart Account as per your needs. In the case of Gelato
, the Gelato Smart Account address will be the same as your EOA, enabling EIP-7702 features.
When using a Kernel
Account, you have the option to use EIP-7702 and ERC-4337 together. Setting eip7702
parameter to true will make your EOA the sender address. However, if you want to utilize existing Kernel accounts only with ERC-4337 features, set it to false.
For a Safe
Account, it defaults to the ERC-4337 standard. You can either use an already deployed Safe Account or create a new one, while enhancing the experience with Gelato’s best-in-class infrastructure.
const privateKey = (process.env.PRIVATE_KEY ?? generatePrivateKey()) as Hex;
const owner = privateKeyToAccount(privateKey);
const publicClient = createPublicClient({
chain: baseSepolia,
transport: http(),
});
const account = await gelato({
owner,
client: publicClient,
});
3. Setup Wallet Client
Quickly get started by creating a wallet client using createWalletClient
from viem
with local account for your specified network. Checkout supported networks here.
const client = createWalletClient({
account,
chain: baseSepolia,
transport: http()
});
4. Create Smart Wallet Client
To create a Sponsor API Key, visit the Gelato App and navigate to the Relay section. Create a new app, select the required networks, and copy the generated Sponsor API Key.
For detailed instructions, click here to learn more about creating a Sponsor API Key. Check out the full implementation of sponsored transactions using Gelato Wallets here , using Kernel Wallets here and using Safe Wallets here.
const smartWalletClient = createGelatoSmartWalletClient(client, {
apiKey: sponsorApiKey
});
5. Sending transactions
To send sponsored transactions, select Sponsored as the payment method.
const results = await smartWalletClient.execute({
payment : sponsored(sponsorApiKey),
calls: [
{
to: "0xa8851f5f279eD47a292f09CA2b6D40736a51788E",
data: "0xd09de08a",
value: 0n
}
]
});
console.log("userOp hash:", results?.id);
const txHash = await results?.wait();
console.log("transaction hash",txHash);
6. Batch multiple transactions
You can batch multiple transactions to be sent on-chain at once by adding them to the calls
array.
const results = await smartWalletClient.execute({
payment : sponsored(sponsorApiKey),
calls: [
{
to: "0xa8851f5f279eD47a292f09CA2b6D40736a51788E",
data: "0xd09de08a",
value: 0n
},
{
to: "0xa8851f5f279eD47a292f09CA2b6D40736a51788E",
data: "0xd09de08a",
value: 0n
},
{
to: "0xa8851f5f279eD47a292f09CA2b6D40736a51788E",
data: "0xd09de08a",
value: 0n
},
]
});
So far, you’ve learned how to send sponsored EIP-7702 transactions using a gelato, kernel and safe wallets. Next, explore different gas payment methods using all three wallets.
Last updated