我有两个ERC20令牌。合同被设计为标准的ERC20。以下是两个令牌作为示例-
AUDC --> Contract address: (0xContractAUDC)
Wallet Address: (0xWalletAUDC)
DAI --> Contract address: (0xContractDAI)
Wallet Address: (0xWalletDAI)我想将一些DAI从wallet 0xWalletDAI转移到0xWalletAUDC,以接收转换后的AUDC作为回报(我有两个wallet的私钥)。
寻找一些帮助,以了解如何实现这一点。如果需要的话,我会尽力提供更多的信息。
我正在使用ethers.js v4.0与区块链交互。
发布于 2019-10-02 12:09:57
我找到了使用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);发布于 2021-08-13 18:22:14
如果这些是ERC20令牌,那么您将需要自己进行记帐。我建议你有单独的合同来处理这件事。
这是an example,可以根据您的用例重新调整用途。
其思想是将一个ERC20令牌发送到执行交换计算的合约,然后将资金从一个令牌移动到另一个令牌。
如果从DAI到AUD的汇率没有波动,那么您可以在合约中将此汇率作为一个常数。不过,这很可能会波动,在这种情况下,交换将会稍微复杂一些。
像UniSwap这样的去中心化交易所使用一种使用可用流动性作为输入的算法自动处理交易所。做这样的事情是一个相当复杂的过程。
另一种选择是拥有一个可由特定签名者调用的approve函数。该签名者可以是作为交换工作流一部分的集中式服务。
或者,您可以使用oracles定期更新两个令牌之间的汇率,但这将耗费大量资源,而且除非您有大量数据,否则可能不是最具成本效益的选择。
https://stackoverflow.com/questions/58069633
复制相似问题