如何让智能合约自动购买 LINK或其他 ERC20代币?

问题描述

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

我有一个协调员合同,需要随机数才能从一副牌中抽出卡片。 Coordinator 调用一个随机生成 Oracle 来实现 Chainlink 的 VRConsumerBase 合约。

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

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

谢谢!

解决方法

合约不能“自动购买LINK”,因为要将LINK从一个账户转移到另一个账户,LINK的所有者必须是签署交易的人,但是,还有其他一些方法可以达到目的您正在寻找的结果。

1 - 如果您知道合同需要多少 LINK,您可以简单地预先或在创建时预先提供资金。不过我猜你不是这种情况。

2 - 在区块链外部进行。也就是说,您可以运行一个流程,每隔一段时间为带有链接的合同提供资金,检查其是否为空或接近空

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

4 - 我见过一些例子,其他人只是支付前期费用以确保协调器合同有 LINK 资金充足,然后他们根据需要手动充值,使用用户存入的 eth/资金作为一种付款以抵消他们必须向合同发送 LINK。

最后,“某人”必须为 LINK 付费,在智能合约中,你不能只用 ETH 交换 LINK,也不能让另一个账户向你或合约发送 LINK,他们有自己签署交易。

如果避免手动资助是您所追求的,我可能会考虑使用元交易使用外部中继器,但请注意,这会导致您的整个 dapp 依赖于该外部中继器的启动和可用需要时发送合同链接。