【问题标题】:How to make a Smart Contract purchase LINK (or other ERC20) tokens automatically?如何让智能合约自动购买 LINK(或其他 ERC20)代币?
【发布时间】:2021-05-09 12:01:16
【问题描述】:

我正在尝试与 Chainlink VRF 功能进行交互。

我有一个协调员合同,需要随机数从牌组中抽牌。 Coordinator 调用实现 Chainlink 的 VRFCConsumerBase 合约的随机数生成 Oracle。

我希望我的 Coordinator/Oracle 使用用户为抽奖价格发送的 Ether 自动购买 LINK 代币,以便它始终可以向 VRF 功能提供所需的 LINK 费用,并且不需要人工手动充值与 LINK 的合同。

是否有任何关于如何实现这一目标的有效示例/教程?我真的希望避免强迫我的合同用户自己购买 LINK。

谢谢!

【问题讨论】:

    标签: ethereum solidity smartcontracts chainlink


    【解决方案1】:

    合约本身不能“自动将 LINK 转移给它”,因为要将 LINK 从一个帐户转移到另一个帐户,LINK 的所有者必须是签署交易的人,但是,还有其他几种方式以达到您正在寻找的最终结果。

    1 - 您可以通过编程方式在 Uniswap 等 DEX 上进行交换,而不是直接转移,即 https://docs.uniswap.org/protocol/V2/guides/smart-contract-integration/trading-from-a-smart-contract

    2 - 如果您知道合同需要多少 LINK,您可以简单地预先为其提供资金,或者在创建合同时为其提供资金。不过我猜你的情况并非如此。

    3 - 在区块链外部进行。即,您可以运行一个进程,每隔一段时间通过链接为合同提供资金,检查它是空的还是接近空的

    4 - 您可以利用元交易让玩游戏的人不需要任何链接。见this example。请注意,这仍然使用我在最后一点提到的外部中继器

    5 - 我见过一些例子,其他人只需支付前期费用以确保协调人合同通过 LINK 获得充足的资金,然后他们根据需要手动充值,使用用户存入的 ETH/资金作为一种付款方式以抵消他们必须将 LINK 发送到合同。

    【讨论】:

    • 感谢您的详细回复!我在想 LINK 的“自动”购买可以通过去中心化交易所完成,比如 Uniswap。因此,我的“协调员”合约将根据 drawCard() 函数的要求接收 ETH 付款,然后在 DEX 上下达市价单,以 RNG 的成本购买 2 LINK。将 LINK 转移到合约后,继续调用 Chainlink VRF 函数。我的逻辑中是否有什么超级错误的东西,或者会使这种实现变得不必要的东西? LINK 大约是 50 美元 atm,预筹资金会花费很多
    • 如果您可以通过 uniswap 或其他措施以某种方式执行交换,那么是的,您的逻辑没问题。一旦发起 VRF 请求,Chainlink 所关心的就是合约是否有足够的 LINK。建议您查看 uniswap 文档,看看您是否可以在solidity docs.uniswap.org/concepts/introduction/swaps 中执行交换
    • 这是错误的。 Uniswap 可以通过合约进行交换。你认为 dex 聚合器是如何工作的?
    • 好点@ParkerD,我更新了答案
    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2022-01-20
    • 2022-01-24
    • 2022-01-01
    • 2021-04-26
    • 2021-10-08
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多