一款基于可验证随机函数VRF的公平比值游戏设计
可验证随机函数VRF的工作原理,在我的上一篇文章《对可验证随机函数VRF的简明解释》中已经做出讲解了,这里不再赘述。
VRF在Hash函数的功能基础上引入私钥SK,即使输入值info是非常简单、取值范围非常有限的信息,比如0~9,在没有获得SK或proof的情况下,通过result也无法反推出info是什么,通过穷举info的取值空间一样不可行,这就给某些应用(不仅仅是区块链共识算法)提供了优秀的基础功能组件,这些应用一般都要求输入域和输出域是预先公开的,但是输入域和输出域之间的映射关系是必须在拥有私钥的情况下才能计算推导出来的。
这里给出一个简单的比值押注游戏设计示例:Alice和Bob通过一个随机数系统Random押注,Alice出一个数A,Bob出一个数B,然后Random系统出一个和A、B紧密关联的随机数R,那么谁出的数更接近R,谁获胜。在这个场景中,Alice和Bob必须先给出自己的数,但是又不能公开自己的数,因为要防止Random系统不公正,其可能暗中与某位参与者通信,这时就用到了VRF的特性。操作流程如下:
Alice和Bob分别存放押金到Random系统;
Alice生成自己的密钥对SKA和PKA,并公布PKA;
Bob生成自己的密钥对SKB和PKB,并公布PKB;
Alice出一个数A,只有自己知道;
Bob出一个数B,只有自己知道;
Alice计算resultA = VRF_Hash(SKA,A),并公布HA = sha256(resultA)到Random和Bob;
Bob计算resultB = VRF_Hash(SKB,B),并公布HB = sha256(resultB)到Random和Alice;
####不直接公布resultA或resultB,而是公布其哈希值,是为了防止Random暗中通知某一方,给予其调整A或B的机会
####哈希值给定后,Alice和Bob双方都不可能再回退调整、修改【A、B、resultA、resultB】,接下来就是计算输赢了
Alice公布resultA到Random和Bob,Random和Bob会校验HA = sha256(resultA)是否成立;
Bob公布resultB到Random和Alice,Random和Alice会校验HB = sha256(resultB)是否成立;
####若校验失败,则扣除作弊方的押金
Random系统计算并公布R = SHA256(resultA,resultB);
Alice和Bob验证R = SHA256(resultA,resultB);
Bob给出VRF证明,Random和Alice都可以通过VRF验证Bob出的数是B;
Alice给出VRF证明,Random和Bob都可以通过VRF验证Alice出的数是A;
####若任何一方拒绝给出VRF证明,则扣除押金
现在有了A、B、R,通过比较A、B和R的差值就能得出谁更接近R,从而断定Alice和Bob的输赢结果。若Random系统的随机数不公正,那么Alice或Bob必然不服,进而退出赌局,但是Random系统的随机数是通过ResultA、resultB进行哈希后的结果,因此,其没有作弊的可能,Alice和Bob必然会心服口服。