random_u32、random_u8_with_range 和 random_bool 这样的辅助工具,可以轻松将 [u8; 32] 输出转换为可用值。由于请求和消费步骤都发生在 ephemeral execution window 内,用户能够获得具备可验证公平性的实时结果,而无需依赖外部服务器。
流程

- 你的程序会通过 CPI 调用 MagicBlock VRF program,并将一个请求追加到队列中。
- 一旦你的随机数请求进入队列,某个预言机就会提取该请求并执行随机数计算。
- 完成后,它会将结果和 proof 返回给 MagicBlock VRF program。VRF program 验证 proof 后,会通过预定义函数回调你的程序,从而“消费”该随机数。
MagicBlock 的 VRF Program 是开源且经过审计的。请参阅 Solana VRF 概览了解产品摘要。
预言机队列
每个随机数请求都会指定一个预言机队列(oracle queue)账户(即RequestRandomnessParams 的 oracle_queue 字段)。与所有 Solana 账户一样,该队列同样存放在 Solana 上;但已委托(delegated)的队列只能在 ephemeral rollup 内部直接写入,而未委托的队列则可在基础层直接写入。请使用与交易运行位置相匹配的队列来发起随机数请求——在 Solana 上使用基础层队列,在 ephemeral rollup 内部则使用已委托的队列。请尽可能引用 ephemeral_vrf_sdk::consts 中的常量,而不要硬编码地址。
| 网络 | 基础层队列 | 已委托队列(ephemeral rollup) |
|---|---|---|
| Mainnet | DEFAULT_QUEUECuj97ggrhhidhbu39TijNVqE74xvKJ69gDervRUXAxGh | DEFAULT_EPHEMERAL_QUEUE5hBR571xnXppuCPveTrctfTU7tJLSN94nq7kv7FRK5Tc |
| Devnet | DEFAULT_QUEUECuj97ggrhhidhbu39TijNVqE74xvKJ69gDervRUXAxGh | DEFAULT_EPHEMERAL_QUEUE5hBR571xnXppuCPveTrctfTU7tJLSN94nq7kv7FRK5Tc |
| Localnet | DEFAULT_TEST_QUEUEGKE6d7iv8kCBrsxr78W3xVdjGLLLJnxsGiuzrsZCGEvb | DEFAULT_EPHEMERAL_TEST_QUEUESc9MJUngNbQXSXGP3F67KvKwVnhaYn6kcioxXNVowYT |
Mainnet 和 Devnet 使用相同的默认队列地址——区别仅在于你所连接的集群。Localnet 使用专用的测试队列,由本地验证器从 Devnet 克隆而来;
DEFAULT_TEST_QUEUE / DEFAULT_EPHEMERAL_TEST_QUEUE 常量随 VRF SDK 一起提供。Audit
阅读完整审计报告
Quickstart
学习如何添加随机数能力

