智能合约开发中的随机数生成、数据信任与时间依赖挑战
1. 随机数生成器的挑战
在区块链这样的确定性系统中,智能合约无法在链上生成真正的随机数。因为区块链是确定性的,每个节点必须执行完全相同的操作,所以随机数生成器(RNG)只能是伪随机的。而且,在全球分布式系统中,没有节点会在同一时间执行完全相同的计算,因此时间不能作为随机性的基础。目前,还没有开发出没有弱点和攻击点的确定性 RNG。以下是几种常见的随机数生成方法及其存在的问题:
1.1 使用区块变量
最初的想法之一是使用区块变量,如以太坊中的 block.coinbase 、 block.difficulty 、 block.gasLimit 、 block.number 和 block.timestamp 。以下是一个基于 block.number 和 block.timestamp 生成 0 到 255 之间随机数的示例代码:
function blockVariables() public view returns(uint8) {
bytes32 x = keccak256(abi.encodePacked(block.number, block.timestamp));
return uint8(uint256(x));
}
这个方法看似可行,但它假设每个矿工都是可信的
超级会员免费看
订阅专栏 解锁全文
1020

被折叠的 条评论
为什么被折叠?



