我想在我自己的ERC20和USDC之间创建一个非常简单的交换。
我正在用Vyper和Python编写这些代码。
我设想这种工作的一种方式是监视区块链上的USDC传输事件,然后根据是否有人想要使用USDC来购买或出售我的ERC20令牌来创建和燃烧我的ERC20令牌的离链程序。
我所设想的机制如下:
USDC传输事件将有一个to:我的合同地址。然后,我的离链侦听器将创建我的ERC20令牌,并将其发送到发送USDC到我的合同的from: address。
我将有一个方法,它会烧掉我的ERC20令牌并发出一个特殊事件(让我们称之为SELL2USDC)。
问题2:我如何将USDC从我的合同发送到第三方地址?Vyper代码样本会很棒的。
问题3:在发送USDC之前,我的合同是否需要有USDC余额?如果还不够呢?我猜合同会恢复,交易也会失败。
发布于 2021-09-29 09:16:55
我无法帮助您实现Vyper/Python,但我认为更好的解决方案是将整个工作流保持在链上。当用户想要将USDC替换为您的ERC20令牌时,您可以调用USDC合同中的审批/TransferFrom函数将这些令牌传输到您的智能契约,一旦完成了这些任务,您就可以创建令牌并将令牌发送给用户。不需要脱链代码(因此更安全)。
如果您希望您的契约中的USDC是可访问的,则始终可以实现一个仅限管理的“撤回”函数,该函数将允许您将令牌发送到任何其他地址。您还可以编程地确定合同将如何处理USDC (例如,通过Aave借出)。
关于你的第三个问题是的。如果要确保用户可以随意来回交换,则必须始终确保您的合同有足够的USDC余额来支持未完成的ERC20。否则事务将失败。
发布于 2021-10-01 20:42:55
对未来自我的注意:
这似乎与当前的任务极为相关:
https://github.com/curvefi/curve-contract-polygon/blob/master/contracts/burners/BTCBurner.vy
https://ethereum.stackexchange.com/questions/110738
复制相似问题