【问题标题】:Exchange ERC20 token with other ERC20 token将 ERC20 代币与其他 ERC20 代币交换
【发布时间】:2020-01-23 22:45:36
【问题描述】:

我有 2 个 ERC20 代币。该合约设计为标准 ERC20。这里以 2 个令牌为例 -

AUDC --> Contract address: (0xContractAUDC)
         Wallet Address:   (0xWalletAUDC)
DAI  --> Contract address: (0xContractDAI)
         Wallet Address:   (0xWalletDAI)

我想将一些 DAI 从钱包 0xWalletDAI 转移到 0xWalletAUDC 以接收转换后的 AUDC(我有两个钱包的私钥)。

寻求一些帮助以了解如何实施。如果需要,我会尽力提供更多信息。

我正在使用ethers.js v4.0 与区块链交互。

【问题讨论】:

  • 你是想做去中心化交易所还是中心化交易所?
  • @VitalyMigunov 我正在寻找集中式的。
  • 这个问题太模糊了。因为实际上有很多方法可以做到这一点
  • 但是如果你想完全集中化,那么创建第三个交易所钱包会更容易,你可以在其中跟踪链下所有代币

标签: blockchain ethereum solidity ether


【解决方案1】:

如果这些是 ERC20 代币,那么您需要自己进行会计核算。 我建议您有单独的合同来处理这个问题。

这里是an example,它可以重新用于您的用例。

想法是将一个 ERC20 代币发送到执行交换计算的合约,然后将资金从一个代币转移到另一个。

如果从 DAI 到 AUD 的汇率没有波动,那么您可以将此汇率作为合约中的常数。不过,这很可能会发生波动,在这种情况下,交换会更复杂一些。

像 UniSwap 这样的去中心化交易所使用一种将可用流动性作为输入的算法自动处理交易所。做这样的事情是一个相当复杂的过程。

另一种选择是您拥有一个可以由特定签名者调用的approve 函数。此签名者可以是作为交换工作流程一部分的集中式服务。

或者,您可以使用预言机定期更新两个代币之间的汇率,但这会消耗汽油,除非您有大量交易量,否则可能不是最具成本效益的选择。

【讨论】:

    【解决方案2】:

    我找到了使用 ethers.js 实现这一点的解决方案 -

    const ethers = require('ethers');
    
    let provider = ethers.getDefaultProvider();
    
    // WALLETS
    const DAIUserWalletObj = new ethers.Wallet(DAIUserPrivateKey, provider);
    const AUDCWalletObj = new ethers.Wallet(AUDCPrivateKey, provider);
    
    //CONTRACTS
    const contractDAI = new ethers.Contract(DAIContractAddress, DAIContractABI, provider);
    constractDAI = contractDAI.connect(DAIUserWalletObj);
    const contractAUDC = new ethers.Contract(AUDCContractAddress, AUDCContractABI, provider);
    contractAUDC = contractAUDC.connect(AUDCWalletObj);
    
    let overRide = { gasLimit: 7500000 }
    let numDAITokens = 20;  // Just for example
    let numOfAUDCTokens = 40; // Just for example
    const receipt1 = await contractDAI.transfer(AUDCContractAddress, numDAITokens, overRide);
    const receipt2 = await contractAUDC.transfer(DAIUserWalletAddress, numOfAUDCTokens, overRide);
    console.log(receipt1);
    console.log(receipt2);
    

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2022-07-29
      • 2022-01-24
      • 2019-02-09
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2021-08-31
      • 2019-02-12
      相关资源
      最近更新 更多