2

描述

获得一个随机数需要很长时间。执行 getRandomNumber 函数后,几分钟后我才能与我的随机数进行交互。

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

重现步骤

  1. 前往此处的文档:https ://docs.chain.link/docs/get-a-random-number/
  2. 向下滚动并单击“使用 Remix 部署此合约”(蓝色轮廓 btn)
  3. 单击看起来像 536123b61468ad4442cfc4278e8de577 的文件夹之一,然后单击 RandomNumberConsumer.sol
  4. 将 LINK Token、VRF Coo​​rdinator 和 Key Hash 替换为 rinkeby 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 的值什么时候会出现。

4

1 回答 1

4

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

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

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

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

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

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

于 2021-06-23T23:24:42.160 回答