第157篇 合约安全-随机数

本文探讨了智能合约开发中使用随机数的安全问题,特别是基于区块链变量的随机数生成方式。通过分析合约示例GuessTheRandomNumber及其攻击合约Attack,揭示了在相同区块内使用block.number和block.timestamp生成随机数的漏洞。修复建议包括避免使用区块变量作为种子,改用预言机获取随机数以提高安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

智能合约的开发中常常会用到随机数,例如 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.合约示例

一个随机数合约 GuessTheRandom

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wonderBlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值