Gasless payments
In this guide, we'll enable our users to make gasless payments for their transaction with any ERC-20 token. They don't need to hold ETH for gas fees.
This is perfect for users who don't have ETH or don't want to spend it on gas fees.
Setup
This guide builds on the Pay with any ERC-20 token guide. Make sure you've gone through and implemented that guide first.
Submit transaction via Glide
To enable gasless payments, you need to pass the signTypedDataAsync
function to the executeSession
method.
If you're using wagmi, you can use the useSignTypedData
hook to get the signTypedDataAsync
function.
This function is used to let the user sign a message to approve the payment transaction without paying gas fees or making any on-chain transactions.
wagmi
import { createSession, executeSession chains, currencies } from "@paywithglide/glide-js";
import { config } from "./config";
const { address: payerWalletAddress } = useAccount();
const { switchChainAsync } = useSwitchChain();
const { sendTransactionAsync } = useSendTransaction();
const { signTypedDataAsync } = useSignTypedData();
const submitTransaction = async () => {
try {
const session = await createSession(config, {
account: payerWalletAddress,
// Optional. Setting this restricts the user to only
// pay with the specified currency.
paymentCurrency: currencies.usdc,
chainId: chains.base.id,
address: "0x1169c6769c4f4b3ca1944af0f26b36582fd5279d",
abi: subscriptionTokenProtocolAbi,
functionName: "mintFor",
args: [payerWalletAddress, 999999907200n],
value: 999999907200n,
});
const { fulfillmentTransactionHash } = await executeSession(glideConfig, {
session: txHash,
currentChainId: chains.base.id,
// callback functions to interact with the user's wallet.
// they are compatible with wagmi.
switchChainAsync,
sendTransactionAsync,
signTypedDataAsync,
});
} catch (e) {
// handle error
}
};