随机数的生成是一个由来已久的问题。一个广泛的原则是:随机性的生成 最好不被任何个体所控制。因此譬如从比特币的未来某区块的数据来获取随机性的方式是不能使人信服 的,因为这些随机性最终实际上是由某个个体决定的,无法证明这个相关人没有作恶。
BTS块链中采用的是一种分布式的随机数生成算法,使用了DPOS结构中的受托人来提供随机性。受托人事先生 成私密的种子数据,然后生成区块时公布该种子数据的哈希值,在下一次生成区块时再公布该种子数据 。最终外部过程所使用的随机数由连续的多个种子数据来确定。这样只要有一位受托人是诚实的并将他们的信息保密,那么其他人就无法预测结果。那么我们可以很放心地假设 受托人中至少其中有一个是诚实的。这样产生的随机数可信程度是非常高的。
bts每块都有一个随机数种子:random_seed,
可以在控制台中通过blockchain_get_block 查询,如:查询第100块的随机数=>
>> blockchain_get_block 1000000
{
"previous": "e9302cdac98a957b738adc7a5844a246f99b6907",
"block_num": 1000000,
"timestamp": "2014-11-13T16:33:10",
"transaction_digest": "c8cf12fe3180ed901a58a0697a522f1217de72d04529bd255627a4ad6164f0f0",
"next_secret_hash": "98e1f662286bb51067169b37d57e26d4c1a184c1",
"previous_secret": "ae365cfb435b8460dadbf9c81663e8880e0ec982",
"delegate_signature": "2095a89c64029014b5e11e11a974aaeec67acd79d747595a7e3c870992dd834c0b0b5b0291bea3db837f4578f426a049d7e9644fc5c7c1b936e38c6e4b5afaa125",
"user_transaction_ids": [],
"block_size": 166,
"latency": 5758292000000,
"signee_shares_issued": 150000,
"signee_fees_collected": 0,
"signee_fees_destroyed": 0,
"random_seed": "c68620f29b33fc6f77c6d0929520712786cf6a2f",<=这个就是随机数种子了
"processing_time": 0
}
随机数有很多的应用场景,如彩票、竞猜等、随机选择等,BTS的101每轮受托人顺序就是利用BTS块链中随机数进行随机排列的。
比特股猜区块小游戏(http://btsgame.org ) 是 一个基于bts块链链工作的应用,利用了bts块链的中随机数进行开奖,开奖数字取值预先指定的区块随机数,所以开奖号码是无法预先知道的,庄家无法作弊。