Documentation Index
Fetch the complete documentation index at: https://docs.dzap.io/llms.txt
Use this file to discover all available pages before exploring further.
The trade methods cover same-chain swaps and cross-chain bridges. Same shape for both — set toChain to bridge.
getTradeQuotes
const quotes = await dzap.getTradeQuotes({
fromChain: 42161,
account: '0xUser',
data: [{
srcToken: '0xaf88...',
destToken: '0x82aF...',
amount: '1000000',
slippage: 1,
// toChain: 8453, // omit for same-chain
}],
});
Returns ranked routes for each item in data.
buildTradeTxn
Compiles a chosen quote into transaction calldata.
const tx = await dzap.buildTradeTxn({
fromChain: 42161,
sender: '0xUser',
refundee: '0xUser',
data: [{
srcToken: '0xaf88...',
destToken: '0x82aF...',
amount: '1000000',
protocol: quotes[0].protocol, // from getTradeQuotes
recipient: '0xUser',
slippage: 1,
}],
});
// tx => { to, data, value, gasLimit }
trade
Build + sign + send in one call. Use this when you have the user’s signer at hand.
const result = await dzap.trade({
request: {
fromChain: 42161,
sender: '0xUser',
refundee: '0xUser',
data: [/* same shape as buildTradeTxn */],
},
signer: walletClient, // viem WalletClient or ethers Signer
});
console.log(result.txnHash);
Approval required. If getAllowance() reports allowance < amount for the chosen token, call approve() first. See Approvals.
tradeGasless
Gasless trades let users swap without holding native gas tokens. DZap pays the transaction fee in gas and takes an equivalent fee in the source token.
How it works
- User approves tokens (standard approval or Permit2)
- DZap executes the transaction on behalf of the user, paying gas fees
- DZap deducts the gas cost from the output, converted to the source token at current rates
For trades with multiple source tokens, DZap checks USD ratios and takes fees proportionally.
Integration
Gasless trades follow the same pattern as regular trades with these changes:
1. Approval or Permit2
Check and set up approvals using getAllowance. See Approvals for details.
import { ApprovalModes } from '@dzapio/sdk';
const { status, data } = await dzap.getAllowance({
chainId: 42161,
sender: '0xUser',
tokens: [{ address: '0xaf88...', amount: 1_000_000n }],
service: 'swap',
mode: ApprovalModes.Default,
});
2. Get quote with gasless flag
const quotes = await dzap.getTradeQuotes({
gasless: true,
fromChain: 42161,
account: '0xUser',
data: [{
srcToken: '0xaf88...',
destToken: '0x82aF...',
amount: '1000000',
slippage: 1,
// toChain: 8453, // omit for same-chain
}],
});
3. Build and execute
Use tradeGasless to build and execute in one call. If using Permit2 and you have already given token approval to Permit2, set hasPermit2ApprovalForAllTokens: true.
const result = await dzap.tradeGasless({
request: {
integratorId: 'dzap',
fromChain: 42161,
sender: '0x...',
refundee: '0x...',
gasless: true,
hasPermit2ApprovalForAllTokens: true, // only if Permit2 approval exists
data: [{
amount: '1000000',
srcToken: '0xA0b8...eB48',
destToken: '0xC02a...6Cc2',
srcDecimals: 6,
destDecimals: 18,
toChain: 42161,
selectedRoute: 'uniswap',
recipient: '0x...',
slippage: 1
}]
},
signer: walletClient,
});
If you have pre-built transaction data, pass it directly:
const result = await dzap.tradeGasless({
request: { /* same as above */ },
signer: walletClient,
txnData: preBuiltTxData, // optional: skips build step if provided
});
getTradeTxnStatus
// Single
const s = await dzap.getTradeTxnStatus({ txHash: '0xabc', chainId: '42161' });
// Batch
const map = await dzap.getTradeTxnStatus({ txIds: '42161-0xabc,8453-0xdef' });
For bridges, poll until s.status === 'completed'.