当前位置:   article > 正文

TP钱包如何使用 DEX 聚合器 API 交易 EVM_tp钱包的

tp钱包的

在本指南中,我们将通过欧易 DEX 提供一个用例来进行代币交换,使用 Ethereum 链上的 ETH 购买 USDT。 这个过程包括:

  • 设置你的环境
  • 获取 DEX 路由列表和交易信息
  • 检查授权额度
  • 发送兑换交易
  • 获取授权并发送兑换交易

    提示

    这个例子使用的是 Ethereum 链;但该方法同时也支持水平扩展,可以通过添加节点来增加链的容量和吞吐量。同时,它还支持智能合约的编写和执行,提供更多应用开发的可能性。

  • 1. 设置你的环境#

    导入必要的 Node.js 库并设置你的环境变量以及定义辅助函数和组装参数 Node.js 环境设置

    2.获取交换信息和构建交易数据#

    2.1 定义你的交换参数#

    接下来,定义你想要执行的交换的参数。

    1. const swapParams = {
    2. chainId,
    3. fromTokenAddress,
    4. toTokenAddress,
    5. amount: '1000000000000000',
    6. slippage: '0.03',
    7. userWalletAddress,
    8. referrerAddress: '', // Optional
    9. feePercent: '', // Optional
    10. };

    2.2 定义辅助函数#

    定义一个辅助函数,用于与 DEX 交换 API 进行交互。

    1. const getSwapData = async () => {
    2. const apiRequestUrl = getRequestUrl(apiBaseUrl, '/swap', swapParams);
    3. return fetch(apiRequestUrl, {
    4. method: 'get',
    5. headers: headersParams,
    6. })
    7. .then((res) => res.json())
    8. .then((res) => {
    9. return res;
    10. });
    11. };

    2.3 构建交易数据#

    已组装的交易参数可用于发起交易。

    1. const { data } = await getSwapData();
    2. const transaction = data[0]?.tx;
    3. const nonce = await web3.eth.getTransactionCount(userWalletAddress, 'latest');
    4. // You can obtain the latest nonce and process the hexadecimal numbers starting with 0x according to your needs
    5. let signTransactionParams = {
    6. data: transaction.data,
    7. gasPrice: transaction.gasPrice,
    8. gas: transaction.gas,
    9. to: transaction.to,
    10. value: transaction.value,
    11. nonce,
    12. };

    3. 检查授权额度#

    3.1 请参考查询授权额度教程#

  • 查询授权额度
  • 下文的 allowanceAmount 代表真实的链上授权额度
  • 3.2 获取授权数量#

    获取数量。如果 allowanceAmount !== '0',请查看步骤 4。如果 allowanceAmount === '0',请查看步骤 5。

    1. const { data: allowanceData } = await getAllowanceData();
    2. const allowanceAmount = allowanceData?.[0]?.allowanceAmount;

    4. 发送兑换交易#

    提示

    如果 allowanceAmount 大于零,则表示已执行批准操作,可以直接发送交易。

    1. if (allowanceAmount !== '0') {
    2. const { rawTransaction } = await web3.eth.accounts.signTransaction(
    3. signTransactionParams,
    4. privateKey
    5. );
    6. const chainTxInfo = await web3.eth.sendSignedTransaction(rawTransaction);
    7. console.log('chainTxInfo', chainTxInfo);
    8. }

    5. 获取授权并发送兑换交易#

    提示

    如果allowanceAmount === '0',这表示尚未授权,需要进行授权操作。

    5.1 定义你的授权交易参数#

    接下来,定义你要执行的授权交易的参数。

    1. const getApproveTransactionParams = {
    2. chainId,
    3. tokenContractAddress: fromTokenAddress,
    4. userWalletAddress,
    5. approveAmount: '...',
    6. };

    5.2 定义辅助函数#

    定义一个辅助函数,用于与 DEX 批准交易 API 进行交互。

    1. const approveTransaction = async () => {
    2. const apiRequestUrl = getRequestUrl(
    3. apiBaseUrl,
    4. '/approve-transaction',
    5. getApproveTransactionParams
    6. );
    7. return fetch(apiRequestUrl, {
    8. method: 'get',
    9. headers: headersParams,
    10. })
    11. .then((res) => res.json())
    12. .then((res) => {
    13. return res;
    14. });
    15. };

    5.3 获取授权交易的交易信息#

    在获得批准之后获取交易信息。

  • const { data } = await approveTransaction();
    

    5.4 合并授权交易事务#

    将交易更新为已批准的交易。

    1. signTransactionParams = {
    2. ...signTransactionParams,
    3. ...{ data: data[0].data },
    4. };

    5.5 发送兑换交易#

    TP钱包获取签名交易信息并发送交易

    1. if (allowanceAmount === '0') {
    2. const { rawTransaction } = await web3.eth.accounts.signTransaction(
    3. signTransactionParams,
    4. privateKey
    5. );
    6. const chainTxInfo = await web3.eth.sendSignedTransaction(rawTransaction);
    7. console.log('chainTxInfo', chainTxInfo);
    8. }

    原文来自:TokenPocket社区

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/706153
推荐阅读
相关标签
  

闽ICP备14008679号