在本指南中,我们将通过欧易 DEX 提供一个用例来进行代币交换,使用 Ethereum 链上的 ETH 购买 USDT。这个过程包括:
导入必要的 Node.js 库并设置你的环境变量以及定义辅助函数和组装参数 Node.js 环境设置
接下来,定义你想要执行的交换的参数。
const swapParams = {
chainId,
fromTokenAddress,
toTokenAddress,
amount: '1000000000000000',
slippage: '0.03',
userWalletAddress,
referrerAddress: '', // Optional
feePercent: '', // Optional
};
定义一个辅助函数,用于与 DEX 交换 API 进行交互。
const getSwapData = async () => {
const apiRequestUrl = getRequestUrl(apiBaseUrl, '/swap', swapParams);
return fetch(apiRequestUrl, {
method: 'get',
headers: headersParams,
})
.then((res) => res.json())
.then((res) => {
return res;
});
};
已组装的交易参数可用于发起交易。
const { data } = await getSwapData();
const transaction = data[0]?.tx;
const nonce = await web3.eth.getTransactionCount(userWalletAddress, 'latest');
// You can obtain the latest nonce and process the hexadecimal numbers starting with 0x according to your needs
let signTransactionParams = {
data: transaction.data,
gasPrice: transaction.gasPrice,
gas: transaction.gas,
to: transaction.to,
value: transaction.value,
nonce,
};
获取数量。如果 allowanceAmount !== '0'
,请查看步骤 4。如果 allowanceAmount === '0'
,请查看步骤 5。
const { data: allowanceData } = await getAllowanceData();
const allowanceAmount = allowanceData?.[0]?.allowanceAmount;
if (allowanceAmount !== '0') {
const { rawTransaction } = await web3.eth.accounts.signTransaction(
signTransactionParams,
privateKey
);
const chainTxInfo = await web3.eth.sendSignedTransaction(rawTransaction);
console.log('chainTxInfo', chainTxInfo);
}
allowanceAmount === '0'
,这表示尚未授权,需要进行授权操作。接下来,定义你要执行的授权交易的参数。
const getApproveTransactionParams = {
chainId,
tokenContractAddress: fromTokenAddress,
userWalletAddress,
approveAmount: '...',
};
定义一个辅助函数,用于与 DEX 批准交易 API 进行交互。
const approveTransaction = async () => {
const apiRequestUrl = getRequestUrl(
apiBaseUrl,
'/approve-transaction',
getApproveTransactionParams
);
return fetch(apiRequestUrl, {
method: 'get',
headers: headersParams,
})
.then((res) => res.json())
.then((res) => {
return res;
});
};
在获得批准之后获取交易信息。
const { data } = await approveTransaction();
将交易更新为已批准的交易。
signTransactionParams = {
...signTransactionParams,
...{ data: data[0].data },
};
获取签名交易信息并发送交易
if (allowanceAmount === '0') {
const { rawTransaction } = await web3.eth.accounts.signTransaction(
signTransactionParams,
privateKey
);
const chainTxInfo = await web3.eth.sendSignedTransaction(rawTransaction);
console.log('chainTxInfo', chainTxInfo);
}