Chain Link VRF需要很长时间才能获得随机数

Hol*_*kac 3 blockchain ethereum solidity chainlink

描述

获得随机数需要很长时间。执行 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 协调器和密钥哈希替换为 rinke 独有的https://docs.chain.link/docs/vrf-contracts/
  5. 导航至 Solidity Compiler 选项卡并单击 Compile RandomNumber.sol。
  6. 在 Rinkeby 上部署合约
  7. 复制到合约地址并发送 LINK 代币为合约提供资金。
  8. 单击 remix 中的橙色 getRandomNumber btn
  9. 单击 randomResult 并观察 randomResult 中的值发生变化需要多长时间。(不断点击直到最终改变)

附加信息

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

Pat*_*ins 6

Chainlink VRF 遵循获取号码的请求和接收周期。这意味着,它必须寻找区块链之外才能得到响应。

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

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

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

因此,对于以太坊来说,返回随机数的最快时间可能是 2 * 区块时间,即大约 30 秒。

在像 Polygon 这样的更快的链上,这个值要低得多。