什么是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,可以去订阅管理面板检查是否缴纳了足够的资金。