Chain Link VRF 获取随机数耗时较长

Chain Link VRF takes a long time to get random numbers

描述

获取随机数需要很长时间。执行 getRandomNumber 函数后,几分钟后我就可以与我的随机数进行交互了。

基本上,我单击 getRandomNumber 后必须等待 2-3 分钟,直到随机数出现在 randomResult 变量中。

重现步骤

  1. 前往此处查看文档:https://docs.chain.link/docs/get-a-random-number/
  2. 向下滚动并单击“使用 Remix 部署此合约”(蓝色轮廓 btn)
  3. 单击类似于 536123b61468ad4442cfc4278e8de577 的文件夹之一,然后单击 RandomNumberConsumer.sol
  4. 将 LINK 令牌、VRF 协调器和密钥哈希替换为 rinkeby 独有的 https://docs.chain.link/docs/vrf-contracts/
  5. 导航到 Solidity 编译器选项卡并单击编译 RandomNumber.sol。
  6. 在 Rinkeby 上部署合约
  7. 复制到合约地址并发送 LINK 代币为合约提供资金。
  8. 点击 remix 中的橙色 getRandomNumber 按钮
  9. 点击 randomResult 并观察 randomResult 中的值改变需要多长时间。 (一直点击直到它最终改变)

附加信息

我不确定这种行为是故意的还是我需要更改代码。理想情况下,我希望在 getRandomNumber 函数完成执行后获得 randomResult 的值。现在我不知道 randomResult 的值什么时候会出现。

Chainlink VRF 遵循 request and receive 获取数字的循环。这意味着,它必须在区块链之外查看才能获得响应。

因此,实际发生了 2 笔交易:

  1. 您请求的交易
  2. 响应交易

有必要像这样查看区块链外部,否则您将得到一个确定性数字而不是随机数。返回随机数的速度取决于您使用的区块链的出块时间。

因此对于以太坊,返回随机数的最快时间是 2 * 块时间,或大约 30 秒。

在像多边形这样更快的链上,这个数字要低得多。