import { DZapClient, ApprovalModes } from '@dzapio/sdk';
import { createWalletClient, http } from 'viem';
import { arbitrum } from 'viem/chains';
const dzap = DZapClient.getInstance();
const walletClient = createWalletClient({
account: '0xYourAddress',
chain: arbitrum,
transport: http(),
});
// 1. Check if token supports EIP-2612 permit (preferred for gasless)
const { data } = await dzap.getAllowance({
chainId: 42161,
sender: '0xYourAddress',
tokens: [{ address: '0xaf88...', amount: 1_000_000n }],
service: 'swap',
mode: ApprovalModes.EIP2612Permit, // Default: EIP-2612 reduces security risk vs unlimited approval
});
// 2. Sign permit if supported (no gas required)
if (data['0xaf88...'].type === 'eip2612') {
const { data: permits } = await dzap.sign({
chainId: 42161,
sender: '0xYourAddress',
tokens: [{ address: '0xaf88...', amount: '1000000' }],
service: 'swap',
signer: walletClient,
});
// Use permits['0xaf88...'].permitData in tradeGasless
}
// 3. Get gasless quote
const quotes = await dzap.getTradeQuotes({
gasless: true,
fromChain: 42161,
account: '0xYourAddress',
data: [{
amount: '1000000',
srcToken: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
destToken: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
slippage: 1,
}],
});
// 4. Execute gasless trade
const result = await dzap.tradeGasless({
request: {
integratorId: 'dzap',
fromChain: 42161,
sender: '0xYourAddress',
refundee: '0xYourAddress',
gasless: true,
data: [{
amount: '1000000',
srcToken: '0xaf88...',
destToken: '0x82aF...',
srcDecimals: 6,
destDecimals: 18,
selectedRoute: quotes[0].protocol,
recipient: '0xYourAddress',
slippage: 1,
}],
},
signer: walletClient,
});