

# 1.关于区块链随机数的一些讨论：
区块链的随机数之伤  
https://www.jianshu.com/p/3d3d9e53b799

Random.org -- 真正的随机数生成器  
https://blog.csdn.net/wssxy/article/details/50601343

以太坊智能合约中随机数预测  
https://www.freebuf.com/vuls/179173.html

RANDAO：以太坊DAO 随机数生成器  
https://www.jianshu.com/p/37e1e2aed913

random.org  
例子：  https://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new


# 2.几点思考：
1.中心化的随机数。
  比如random.org。  
  但如何使用存疑？随时获取，但随时在变化。  
  可以考虑中心化系统周期性获取并写入链上供使用，但仍无法避免被作恶节点操控（节点可以控制哪些随机数会被写入链上）。    
  
2.公共一起参与生成的随机数服务。  
  通过合约来实现，定时发布随机数供全网使用。实现比较复杂。
      
3.使用未来的区块blockhash来生成随机数。   
  需要等待,并被再次触发时，才能开奖。如果节点能控制区块生成，也存在被操控的可能。  

4.使用多因子，同时使用区块信息及外来预言机信息。  
  包括用户输入信息，比如一个随机数a的hash，开奖时对随机数a进行验证，验证通过，原随机数a参与计算。  
  至少需要两个区块的周期。能保证用户不吃亏。  
  但对于用户同时作为出块节点的情况，并不能避免节点作恶。  

5.对于非实时性的场景，bty可以考虑使用具有随机性的ticketid。  

6.系统模拟用户参与投注，对多用户的场景，大家都贡献自己的随机数，共同计算最终随机数。  
  但如果节点作恶选择性打包节点，操纵结果，也没什么办法。

7.玩家发布随机数，庄家私钥加密签名，合约用公钥验证，并将签名用作随机数生成。非实时性的场景中，可避免节点作恶。

总的来说，如果节点具备作恶能力，除了引用确定的外部客观的随机量（比如以太坊未来区块的hash）外，只要使用区块链内部数据来计算随机数，都存在被操控的可能性。但引用外部变量，或者未来变量，实时性上必然打折扣。