使用Chainlink VRF获取随机数

240 阅读1分钟

什么是Chainlink VRF?

Chainlink VRF即Chainlink Verifiable Random Function,可以用于从链上获取随机性。

如何使用Chainlink VRF?

目标

下面我们将实现通过智能智能合约投掷骰子,将用户分配到《权利的游戏》中20个家族之一的房子中。

合约具有以下函数:

  • rollDice :向Chainlink VRF请求随机数
  • fulfillRandomWords :接收预言机返回的结果的回调函数
  • house :查看指定用户地址被分配到的家族

这里有合约的完整实现。

创建订阅

进入vrf.chain.link,点击右上角按钮连接钱包,然后单击Create subscription按钮,你的连接钱包的地址会自动填入管理员地址字段中。

创建成功后页面会显示该订阅的Subscription ID,如下图:

部署使用VRF的合约

该合约为例,选择部署VRFD20合约。为了让合约知道使用哪个VRF订阅,部署时要传入VRF订阅的ID,如下图:

配置VRF订阅的消费者

我们还需要让VRF订阅知道哪个合约是被允许进行通信的,因此还要在vrf.chain.link中配置上一步部署好的合约为VRF订阅的消费者。操作如下图:

交纳资金

使用VRF服务需要向Chainlink交纳一定的资金。如下图:

测试

调用合约的rollDice方法,如下图:

接着调用house方法,如果成功会显示类似下图的结果:

如果house长时间调用不成功并提示execution reverted: Roll in progress,可以去订阅管理面板检查是否缴纳了足够的资金。