从原理到实战:全面解读 Chainlink VRF 2.5 随机数服务与 Solidity 示例

参考文档

Remix: https://remix.ethereum.org/
领取 LINK 测试币 :https://faucets.chain.link/bnb-chain-testnet
VRF 订阅账号:https://vrf.chain.link/
ChainLink VRF 2.5官网:https://vrf.chain.link/bnb-chain-testnet
ChainLink VRF 合约源码:https://github.com/smartcontractkit/chainlink/tree/contracts-v1.3.0/contracts/src/v0.8/vrf/dev

引言

在区块链开发中,我们常常需要安全、可信且不可预测的随机数。无论是链上游戏、NFT 空投、还是去中心化抽奖应用,“随机性” 都是公平性和用户信任的核心。而 Chainlink 的 VRF(Verifiable Random Function)2.5,正是为此设计的一种链上可验证的随机数生成服务。

本文将从原理出发,结合开发者流程,为你详细讲解 Chainlink VRF 2.5 的工作机制、使用步骤和代码实践。

一、什么是 Chainlink VRF?

Chainlink VRF 是 Chainlink 提供的 可验证随机数生成器,全称为 Verifiable Random Function。它能在链上提供:

  • 不可预测性:任何人在请求发出前无法预测结果。
  • 可验证性:结果附带签名,任何人都能验证是否被篡改。
  • 去信任化:不依赖中心化服务器,结果来自去中心化的 Chainlink 节点。

VRF 2.5 是什么?
VRF 2.5 是 VRF v2 的升级版本:

  • 优化费用结构
  • 支持 订阅模式 和 direct funding(直接付费)模式
  • 支持更多链(BNB Chain、Polygon、Arbitrum 等)
  • 接口更友好,集成更简单

二、Chainlink VRF 的核心工作机制

Chainlink VRF 的本质是:加密生成 + 签名验证。流程如下:

1. 用户合约发起请求

智能合约向 Chainlink 的 VRF Coordinator 发起请求(需要支付 LINK),包含:

  • 请求者地址
  • keyHash(节点密钥标识)
  • subscriptionId(订阅账户 ID)
  • gas 限制与回调参数等

2. Chainlink 节点生成随机数

Chainlink VRF 节点接收请求后,生成如下内容:

  • 使用私钥签名某个随机值
  • 生成一个 VRF proof(证明)和随机数结果

此过程完全由 Chainlink 节点处理,用户无法预测其结果。

3. 节点将结果返回 VRF Coordinator

Chainlink 节点将生成的随机数及其证明提交至链上的 VRF Coordinator。

4. Coordinator 验证随机数签名

VRF Coordinator 合约在链上验证随机数是否由 Chainlink 节点合法生成。

  • 验证签名是否匹配 keyHash
  • 校验随机数生成过程是否符合 VRF 加密标准

5. 用户合约接收并处理随机数

验证通过后,VRF Coordinator 会调用用户合约的 fulfillRandomWords() 函数,将最终的随机数数组发送回去。
你可以在此回调中执行各种逻辑,如:彩票开奖、NFT mint 随机分配、游戏中生成掉落奖励等。

三、使用 Chainlink VRF v2.5 的完整开发流程

使用 VRF v2.5 的两种方式
✅ 订阅模式(subscription):先充值 LINK 到订阅账户,每次请求消耗订阅里的余额
✅ direct funding(直接付费):每次请求时直接支付 LINK 或原生代币,无需提前充值

下面我们用两种模式都实战一遍。

(一)使用 subscription 模式

3.1 创建订阅

创建订阅账号 传送🚪
在这里插入图片描述

输入电子邮箱(可选)和项目名称(可选)来创建订阅。
在这里插入图片描述

创建一个订阅账户的第一步(点击Create Subscription) 交易请求,点击确认。
在这里插入图片描述

创建一个订阅账户的第二步,会收到确认交易,你也可以点开看。

3.2 申请订阅 ID

创建订阅 ID 传送🚪
在这里插入图片描述

点击订阅,然后输入电子邮箱(可选)和项目名称(可选)来创建订阅。

在这里插入图片描述

创建一个订阅账户的第一步(点击Create Subscription) 交易请求,点击确认。
在这里插入图片描述

创建一个订阅账户的第二步,会收到确认交易,你也可以点开看。
在这里插入图片描述

创建一个订阅账户的最后一步,请求签名。
在这里插入图片描述

3.2 查看订阅

创建好订阅之后,你可以看到在这个面板上有刚刚创建的订阅账户。
在这里插入图片描述

3.3 查看 Subscription lD

点进这个订阅账户,可以查看到 Subscription lD。把这个ID 复制下来,等会儿我们合约要用到。
在这里插入图片描述

3.4 申请 LINK 代币和订阅 ID

如果是测试网,需要申请测试 LINK 代币和订阅 ID。申请测试LINK代币点击传送🚪我这里把接收LINK测试币的钱包地址复制进去了。然后根据提示领取就可以了,成功之后,我们可以去BSC浏览器查看,账户地址,看是否有LINK测试币。
在这里插入图片描述

3.4.1 MetaMask里添加代币

为方便起见,我们在MetaMask里面添加代币。找到在BNB链上的 Chainlink 代币地址,复制。传送🚪
在这里插入图片描述

点击 MetaMask,连接的是BSC测试网络,找到添加代币。
在这里插入图片描述

我这里选择的是BNB Smart Chain Testnet 网络,然后代币地址复制进来,我这里已经添加了。

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yoona1020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值