赞
踩
在本指南中,我们将通过欧易 DEX 提供一个用例来进行代币交换,使用 Ethereum 链上的 ETH 购买 USDT。 这个过程包括:
提示
这个例子使用的是 Ethereum 链;但该方法同时也支持水平扩展,可以通过添加节点来增加链的容量和吞吐量。同时,它还支持智能合约的编写和执行,提供更多应用开发的可能性。
导入必要的 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;
提示
如果 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 },
- };
TP钱包获取签名交易信息并发送交易
- if (allowanceAmount === '0') {
- const { rawTransaction } = await web3.eth.accounts.signTransaction(
- signTransactionParams,
- privateKey
- );
- const chainTxInfo = await web3.eth.sendSignedTransaction(rawTransaction);
- console.log('chainTxInfo', chainTxInfo);
- }
原文来自:TokenPocket社区
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。