随机数漏洞问题严重制约EOS、波场、ETH发展,比特元更安全( 五 )

下面 , 我们就来着重讲讲如何实现在随机数上的优化 。

首先 , 用户使用钱包账户中的BTY购买票(Ticket) , 10000BTY对应一票 。 钱包同时生成一个randNum , 哈希过后再结合钱包挖矿地址的私钥 , 票对应的index(一次可以买多张票)等元素再做两次哈希 , 得到一个公开哈希参数(pubHash):

pubHash =

hash(hash(privateKey:index:hash(randNum)))

然后 , 新购买的票中包含这个pubHash以及randNum并存入区块链 , 这张票有12小时的成熟期 , 过了12小时才可以参与挖矿 。

接着共识算法从区块链中找到已经成熟的票(Ticket)开始打包 , 由于共识打包区块操作只在节点本地执行 , 所以它可以读取本地存储的私钥 , 算出一个私密哈希(privHash)并将这个参数放入到挖矿交易中:

privHash =

hash(privateKey:index:hash(randNum))

最后 , 智能合约收到挖矿交易 , 对比hash(privHash)和pubHash的值 , 两者一致挖矿交易成功 , 对应的节点获得挖矿奖励 。 否则挖矿交易执行失败 。

推荐阅读