第157篇 合约安全-随机数

Posted wonderBlock

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第157篇 合约安全-随机数相关的知识,希望对你有一定的参考价值。

智能合约的开发中常常会用到随机数,例如 Lottery 和现在流行的 NFT 数字藏品的属性等都需要用到随机数。目前来说常见的随机数获取有两种:使用区块变量生成随机数,使用预言机来生成随机数。

使用区块变量生成随机数,常见的区块变量有:

  • block.basefee(uint):当前区块的基本费用
  • block.chainid(uint):当前链 id
  • block.coinbase():当前区块矿工地址 address payable
  • block.difficulty(uint):当前区块难度
  • block.gaslimit(uint):当前区块 gaslimit
  • block.number(uint):当前区块号
  • block.timestamp(uint):自 Unix 纪元以来的当前区块时间戳(以秒为单位)
  • blockhash(uint blockNumber) returns (bytes32):给定区块的哈希

其中 block.difficulty, blockhash, block.number 和 block.timestamp 这四个是用得比较多的。

1.合约示例

一个随机数合约 GuessTheRandomNumber 

  1. 这是一个游戏,如果你能猜到从块哈希和时间戳生成的伪随机数就赢;

一个攻击合约 Attack

  1. 攻击通过简单复制计算随机数的代码来计算正确答案;
// SPDX-Licen

以上是关于第157篇 合约安全-随机数的主要内容,如果未能解决你的问题,请参考以下文章

数字商品指南系列第三篇:编写智能合约并编译部署

第158篇 合约安全-selfdestruct

第158篇 合约安全-selfdestruct

第142篇 合约安全-重入锁

区块链 | 预言机从零开始使用Chainlink预言机- 智能合约中使用更安全的随机数-代码实战

国内数字藏品的应用与商业探索