去中心化预言机Chainlink可验证随机函数正式上线,开发者可以用这个工具生成随机数,并在链上进行验证。ChainlinkVRF将为众多优秀的智能合约项目带来巨大价值,尤其能证明智能合约使用的随机数不可被篡改和操控。
ChainlinkVRF有助于加速区块链游戏、安全和layer2协议等众多领域的智能合约开发进程。开发者可以轻松集成ChainlinkVRF,参考我们近期发布的开发者文档,在智能合约中使用可验证的随机数。
可验证随机数具有哪些价值
要开发安全的智能合约,并规避合约资金被盗风险,开发者必须在安全方面下大功夫。如果随机数是智能合约依赖的关键数据,那么开发者就自然会期望合约所有相关方都拥有同等的不确定性,并降低因某一方成功预测结果而钻空子的风险。
ChainlinkVRF可以为智能合约提供随机数以及加密证明,在链上验证随机数具有不可预测性,因而可以满足上述两个要求。由于ChainlinkVRF的随机数可以在链上进行验证,所以问题节点只能选择不对请求做响应,在Chainlink即将上线的staking机制下,这样的行为会遭到罚款,之后还可能会被移除出随机数生成者名单,因此会遭受经济损失。
开发者可以使用ChainlinkVRF开发出基于随机数的可靠智能合约应用:
●为游戏提供随机数,数据可在链上验证,提升游戏的可信度,并向对安全比较敏感的用户提供额外的保障。
●为游戏带来更多挑战性和不确定性,比如随机向玩家提供奖励。
●随机分配任务和资源,并保障可验证性,如:向案子随机分配法官,或向公司随机分配审计人员。
●选择观察员代表投票决议智能合约提案,并达成共识
现有方法存在的安全隐患
ChainlinkVRF的可验证随机数可以将现有随机数生成法存在的诸多限制一一攻克。使用区块哈希值等链上数据或将链下生成的随机数传输至链上,这两种方法都存在一定自身缺陷。
开发者应该尽量避免过度依赖基于区块哈希值产生随机数。假设一个智能合约基于某一高度的区块哈希值最后一位数的奇偶性判定结果。这样看似好像概率是50/50,但假设有一名矿工产量占区块总量的三分之一,现在这名矿工决定把区块哈希值最后一位数是1的优胜区块全部扔掉,并放弃大约2-3个以太币的区块奖励。这样一来,这名矿工就能够将结果是0的概率从50%提升至2/3,导致所有依赖这个方法生成随机数的智能合约用户都会遭受损失。如果这样做可以为这名矿工带来12-18个以太币的额外收益,那么他的选择在经济上是合理的。因此,这个机制下的合约价值会有一定上限。
为了避免这样的问题,开发者已经转向链下解决方案,在链下生成随机数并传回至链上。然而,如果无法通过加密手段验证链下随机数,数据将有可能在链下生成和传输过程中被篡改。同样地,用户只能闭着眼睛相信链下生成的随机数是公正可靠的,并相信这些数据在传输的过程中没有被篡改过。
区块链开发者在为智能合约提供随机数的过程中还需规避以下关键痛点和安全风险:
智能合约无法访问或无法兼容
中心化的随机数生成者操纵数据
区块链上的矿工作为用户进行操纵以谋取私利
终端用户需要盲目相信应用的安全可靠性
为了解决上述问题以及其他安全风险,ChainlinkVRF使随机数生成过程变得安全透明,并通过加密技术证明了每个结果的公正和公平性。
ChainlinkVRF的工作原理
ChainlinkVRF工作原理
简而言之,智能合约会向Chainlink或Chainlink预言机网络提供一个seed来请求随机数。这个seed是预言机无法预测的,会被用来生成一个随机数。每个预言机都会使用自己专属的密钥生成随机数。当结果和证明在链上发布后,可以使用预言机的公钥和智能合约的seed进行验证。这个方法利用了区块链著名的签名验证功能,合约只能使用在同一区块链环境中被验证通过的随机数。
使用ChainlinkVRF工具最大的好处就是随机数是可以验证的。即使某一节点被攻陷,该节点也无法操控或影响最终结果,因为它无法通过链上的加密验证。最糟糕的情况无非是沦陷的节点不对请求做出任何响应,而这将立刻被区块链记录下来,并且会被永远保存在链上。用户可以参考有效的证明,不再使用有过无法响应或无法提供有效签名记录的节点。即使节点被操控,最终生成的随机数也不会受影响。沦陷的节点只能选择不响应请求,而在Chainlink即将上线的staking机制下,这种行为将被罚款,而且问题节点之后会从随机数生成者名单中被移除。因此,低质量或违规的节点将遭受巨大的短期和长期经济损失。简而言之,ChainlinkVRF只要正确接入,就绝对无法被操控,唯一可能发生的就是问题节点下线或不响应,之后被彻底移除出去。这个机制为智能合约开发者和用户提供了极大的安全保障。
ChainlinkVRF还有一个优势,那就是随着使用人数不断增加,用户支付给节点操作者的费用也会相应上涨,因此节点会更有动力提供尽可能多的安全保障。之后,用户可能会要求通过staking的方式进行加密安全保障,付更多费用获得额外的安全性。这样一来,用户付费就会形成一个全球共享资源池,本来需要花钱自主开发RNG解决方案的用户会将这笔钱用于提升整个区块链生态圈共享资源的安全水平。Chainlink现已接入Polkadot、Tezos等多条区块链,这意味着Chainlink生态圈用户将形成网络效应,持续扩大,用户数量和加密安全水平也将形成一个相辅相成的良性循环。
集成案例详解:PoolTogether
PoolTogether是以太坊上的一个保本型储蓄彩票游戏,我们认为这是一个非常新颖有趣的概念。PoolTogether团队在开展了广泛技术调研后,决定使用ChainlinkVRF为其应用提供可验证的随机数。
PoolTogether是如何使用Chainlink可验证随机数的
PoolTogether是一个保本型储蓄游戏,将用户存款集中在一起,每天或每周进行一次抽奖,将存款利息当作奖金发放给中奖者。这个游戏通过彩票机制激励用户的储蓄行为。
PoolTogether使用ChainlinkVRF生成可验证的随机数,可向其用户证明每期中奖者是由完全随机的数字选出来的。这样做除了为了保障自身安全以外,还可以向用户证明其关键环节的安全性是有迹可循的,且随机数生成过程是可以验证的。这样一来,用户就更有信心参与到智能合约中,相信他们享受着同样的中奖概率。
技术详解
ChainlinkVRF是Goldberg可验证随机函数的实现,具体细节请参考这篇论文。“可验证随机函数”中的“随机”指“任何没有seed或密钥的人都完全无法预测”。
VRF密钥是预言机以加密的方式在均匀分布的{0,…,#secp256k1-1}中挑选出的一个数字。与该密钥相对的有一个公钥,这个公钥对应着一个预言机。预言机将公钥与链上VRF和Chainlink任务ID绑定。
当智能合约请求随机数时,它会提供一个seed。为了确保VRF结果无法被预测,需要在seed中植入无法被预测且难以被篡改的值,比如最近一次的区块哈希值,或者是经过加密验证的链下数据,比如某项资产最近更新的价格。你可以将这些数据转换成bytes32,使用keccak256算法生成seed。链上VRF将智能合约seed与其他数据混合在一起,以避免重放攻击,为合约提供一些基本的保护,但除此之外,提供一些专门的保护也是至关重要的。
一旦链上VRF确定了seed,就会在以太坊log中进行广播,向智能合约要求的预言机请求相应VRF结果。预言机看到这条log后会做出如下操作:
首先,它将seed和预言机公钥作为数据输入,“对输入取哈希值作为曲线方程输入”,从secp256k1获得安全加密的随机样本。方法是使用keccak256算法,用递归法对数据取哈希值,直到输出小于secp256k1算法的basefield,并且是secp256k1曲线上某一点的x坐标。因此是对输入取哈希得出的结果。
接着,将secp256k1曲线的坐标乘以密钥,得出?点。用keccak256算法取?哈希值,以uint256格式作为VRF的输出结果。它会生成一个证明,证明?除以的倍数等于预言机公钥除以secp256k1生成器的倍数。这个证明方式与Schnorr签名很接近:首先,他从{0,…,#secp256k1-1}中随机安全地取出一个nonce,这与私钥生成的方式很像。然后,计算公式u=n×g,其中g为secp256k1生成器,u为以太坊地址。然后计算公式v=n×(x,y)。接着,将、VRF公钥、?、u的地址以及v合并取哈希,并将哈希取模运算#secp256k1的余数称为c。最后,计算s=n-c×k取模运算#secp256k1,k为VRF密钥。因此证明包含公钥、?、c、s以及seed。然后将结果发回至链上VRF,验证证明,如果验证通过,则将数据返回至智能合约。
为了验证证明,合约应做到以下几点:
检查公钥和?是否是secp256k1曲线上有效的点
验证c×pk+s×g点的地址是否与u的地址一致
用公钥和seed取哈希作为曲线方程的输入,检查c×?+s×(x,y)的keccak256哈希值是否等于c。
若有兴趣直观了解此方案的加密安全逻辑,请参考JimmySong的《ProgrammingBitcoin》一书中第三章“签名和验证”中关于“箭头”的类比。我们在此希望实现的特殊“目标”是c。若想完整了解此方案的安全证明机制,请参考MakingNSEC5PracticalforDNSSEC的附件B。
然而,用secp256k1做纯量乘法,在以太坊虚拟机上直接运算的成本极其高昂。因此为了提高效率,我们借鉴了Vitalik的方法,将一个证人传入证明,验证证人的c×?运算结果是否与实际相等。这样一来,我们就能把c×?的运算工作转移到链下,只需验证链下运算结果是否与实际相等即可,这样就可以大幅降低运算成本。
因此,除了上述数据输入和步骤之外,链上验证还包括c×?以及s×(x,y)的证人。需要检查这些证人是否是secp256k1曲线上有效的点,并且用Vitalik的方法验证这些证人的运算结果是否与实际匹配。另外,以太坊上的地址用u表示,同样也用Vitalik的方法验证u是否与c×pk+s×g点匹配。
ChainlinkVRF发展计划
Chainlink去中心化预言机网络中包含一千多个优质节点,使用门限签名技术,网络具有高度扩展性,并以高成本效益的方式实现去中心化。这将为ChainlinkVRF带来极高的去中心化水平和可用性。我们将两者合二为一,既利用ChainlinkVRF的独特优势为链上提供可验证随机数,又利用Chainlink网络中几千个节点实现高成本效益和高可用性。
Chainlink以去中心化的方式实现可验证随机函数
Chainlink丰富的生态系统一旦加入ChainlinkVRF,我们就能建立遍布全球的分布式节点网络,在经济激励的驱动下在链上生成并广播可验证的随机数。Chainlink门限签名技术与高度去中心化的节点网络相结合,将有效规避用户资金被盗风险。不仅ChainlinkVRF端反馈的数据能在链上得到验证,还能保证极高的可用性。目前Chainlink已接入多条可能需要可验证随机数的区块链,再加上虚拟货币经济的激励机制,ChainlinkVRF很有可能成为智能合约使用随机数的新标准。
除了上述优势之外,我们目前正在完善ChainlinkVRF的功能,研发去中心化的随机数生成技术,并积极与其他RNG系统开展合作。根据我们的初步研究,我们相信ChainlinkVRF能与VDF以及其他随机数生成法在链上和链下结合使用。我们很高兴能够跟区块链圈和学术圈通力合作,共同推动智能合约可验证随机数生成技术向前发展。
欢迎试用ChainlinkVRF并给出你的宝贵意见
我们目前处于ChainlinkVRF安全评估的最后阶段,并希望与开发者社区和学术界的用户交流反馈。如果你对VRF及其完善方案有任何意见或建议,欢迎发邮件至vrf@chain.link告诉我们。
万万没想到,经过昨天的上下插针后,今早又来一波,狗庄割韭菜割上瘾了?割菜一时爽,一直割菜一直爽! 我们复盘一次,今天早上和上周二晚上比特币都出现了几分钟的快速回落,币价在回落前毫无征兆.
AMA主题:Stafi如何融入波卡生态分享嘉宾:波卡生态开发者计划负责人Eric主持人:Stafi联合创始人向阳Part1-Self-introduction:hello~大家好.
团队争霸赛,赢取高达100万美元等值BNB! 参与人数越多,奖励越高 最佳人气奖:团员人数最多,团长将再获得$5.
开始努力吧!在这个过程中你必须放弃很多东西,但你要明白它们都不是你最终想要的,你要相信在你成功以后,总有一天它们会再回来,而且比现在更美好!据资本实验室消息.
相信大家都会有这样的一段经历,刚开始一段时间玩合约交易时,会很纠结行情的涨跌。一旦自己判断错了行情,不止是账户亏损那么简单,更在意的其实是自己的情绪,为什么行情就是涨?每当陷入这样的情绪后,便容.
作者:我要写本书 距离比特币完成第三次减半,已经过去半个月的时间了,但比特币的热度却一直没有衰退.