1

我试图了解 Chainlink VRF 如何集成到 Solidity 合约中,例如在这个随机生成的 NFT 教程中:https ://blog.chain.link/random-numbers-nft-erc721/

我的问题是关于预言机的实际资金。在 Chainlink VRF 文档中,会显示此警告:“除非您部署的合约有足够的 LINK 来支付,否则请求随机性将失败。了解如何获取测试网 LINK 并为您的合约提供资金。” 举例说明如何使用 metamask 和 Remix 为 VRF 合约提供资金。

但是,我不确定这将如何大规模运作。如果你有一个非常受欢迎的 NFT“工厂”,每天/小时/分钟可能会有很多请求,你是否只是希望提前运行这个 VRF 合约的资金以避免上述警告(似乎成本不会微不足道/难以预测)?

或者,如果您希望您的 NFT 消费者为其提供资金,您是否必须构建一些将 Ether 转换为 Link 然后将其发送到 oracle 合约的逻辑?(或者让他们去购买 Link 代币?)

我可能以错误的方式看待这个问题,但是文档中似乎没有很好地描述可伸缩性,并且仅从测试/测试网络的角度来看。谢谢你。

4

2 回答 2

2

你可以:

  1. 将费用直接转移给调用者

    要求LINK付款,或其他支付 oracle 请求费用的付款方式

  2. 以较小的频率请求 Oracle 数据(如果您的用例允许)

    您是否从预言机收到一些价格信息?每天更新一次价格信息而不是每小时一次就足够了吗?

  3. 将您的合约逻辑更改为不需要(那么多)预言机数据

    你的工厂真的需要链下随机数生成吗?从区块哈希、难度等中生成“随机”数字还不够吗?

于 2021-04-16T11:20:22.310 回答
0

我的建议是,可能有点尴尬,但为了去中心化,可以工作。

  • 您使用足够的链接向您的 Contract1 收费以开始

  • 向每个铸币者收取以 eth 为单位的等价链接交易成本(+ 涵盖合约之间链接和转移的交易成本的百分比)

  • 正如他们铸造的那样,它被纳入价格中,并且 eth 被发送到 Contract2。

  • 在 Contract2 中只存在一个公共可调用函数,用于通过 routerV2 或类似合约启动链接交换。

  • 通过调用此函数和合约,您可以让任何铸币者激活交换合约功能

  • Contract2 中的 eth 将作为链接发送回 Contract1。

  • 您可以进行反击,然后在每次链接资金不足时调用 Contract2 并自动重新填充。

  • 如果您将其构建到造币厂中,则国际米兰将支付费用。

于 2021-11-08T05:04:46.580 回答