0%

死磕chainLink VRF 原理

原文集锦:https://github.com/blockchainGuide

引言

随着区块链技术的发展,智能合约已经成为一种重要的应用模式,被广泛应用于金融、游戏、治理等多个领域。然而,智能合约的安全性一直是业界关注的重点,尤其是在涉及到随机性的应用场景中。传统的方法如基于区块哈希的随机数生成存在明显的漏洞,而链下生成随机数的方法又缺乏透明度和可验证性。Chainlink VRF的推出正是为了解决这些问题,提供了一种安全、透明且可验证的随机数生成方案。

可验证随机数的价值

  • 提升安全性:Chainlink VRF提供的随机数及其加密证明可以在链上验证,确保了随机数的不可预测性,从而增强了智能合约的安全性。
  • 增强信任:用户可以确信智能合约中的随机数是公正的,不会受到任何一方的操控。
  • 应用场景
    • 游戏行业:为游戏提供可验证的随机性,增加游戏的可信度。
    • 抽奖与投票:为抽奖和投票系统提供公平的随机数,确保结果的公正性。
    • 分配任务和资源:随机分配任务和资源,同时保证过程的可验证性。

现有方法的问题

  • 基于区块哈希:容易受到矿工或矿池的操控,使得结果变得可预测。
  • 链下生成:虽然解决了链上数据的可预测性问题,但缺乏透明度,用户无法验证链下生成的数据。
  1. 用户请求随机数: 智能合约向 Chainlink 节点发送一个请求,请求生成一个随机数。
  2. Chainlink 节点获取外部随机数: Chainlink 节点从一个可信的外部随机数源(例如,一个硬件随机数生成器)获取一个随机数。
  3. 生成请求ID和加密哈希: Chainlink 节点生成一个唯一的请求ID,并对请求ID和外部随机数进行加密哈希。
  4. 将加密哈希提交到链上: Chainlink 节点将加密哈希提交到链上,作为请求的证明。
  5. 智能合约验证: 智能合约从链上获取加密哈希,并使用相同的算法对请求ID和外部随机数进行加密哈希。如果生成的哈希值与链上存储的哈希值一致,则验证通过。
  6. 智能合约使用随机数: 智能合约将验证通过的外部随机数用于后续的计算或操作。

合约层的工作流程

  • Chainlink有两个合约,我们主要关注的是VRFConsumerBase.sol和VRFCoordinator。
  • VRFConsumerBase是将调用VRF协调员的合同,它最终负责发布随机性。
  • 我们将继承VRFConsumerBase,并将使用其中的两个函数。
    • requestRandomness,它对随机性提出初始请求。
    • fulfillRandomness,这是一个接收并对经过验证的随机性做一些事情的函数。

image-20240819160837528

  • RandomGameWinner合约将继承VRFConsumerBase合约,并将在VRFConsumerBase中调用requestRandomness函数。
  • 在调用该函数时,对随机性的请求开始了,VRFConsumerBase进一步调用VRFCoordinator合约,该合约负责从外部世界获取随机性。
  • 在VRFCoordinator获得随机性后,它调用VRFConsumerBase中的fullFillRandomness函数,然后进一步选择赢家。
  • 注意重要的部分是,尽管你调用了 requestRandomness 函数,但你在 fullFillRandomness 函数中获得了随机性。

技术细节

  • VRF的实现:Chainlink VRF基于Goldberg可验证随机函数,利用secp256k1椭圆曲线加密算法。
  • 私钥与公钥:预言机拥有私钥,用于生成随机数;公钥则用于验证随机数的正确性。
  • 生成过程:预言机接收seed后,使用私钥和seed生成随机数和证明。
  • 验证过程:智能合约通过预言机的公钥验证随机数和证明的有效性。

安全性保障

  • 不可预测性:即使预言机被攻破,也无法影响随机数的生成结果。
  • 惩罚机制:预言机若不响应请求,将面临经济惩罚,并可能被移出预言机网络。
  • 网络效应:随着使用人数的增加,预言机更愿意提供高质量的服务以维持声誉。

实际应用案例

  • PoolTogether:这是一个基于以太坊的无损储蓄协议,用户可以存入资金参与抽奖,中奖者将获得利息作为奖励。PoolTogether使用Chainlink VRF来生成随机数,确保每次抽奖的公平性和透明度。

参考