skka3134

skka3134

email
telegram

智能合约安全:1.随机数攻击

什么是随机数攻击?

许多合约直接使用区块信息如 timestamp、blockhash 等在合约内生成随机数。这很容易被 MINER 操控,因为他们可以选择哪些交易打包进区块。黑客可以在获知随机数生成算法后,操控其中变量获取有利结果。

生成安全随机数的方法:

使用 Chainlink VRF 等去中心化随机数生成服务
将随机数生成过程放在链下,并利用预言机将结果上链
使用多方 Commit-Reveal 机制,由多个实体共同参与随机数生成
引入不确定因素如用户交互增加不可预测性

代码示例:

// Use Chainlink VRF
uint256 public randomResult;

function getRandomNumber() public returns (bytes32 requestId) {
   return requestRandomness(keyHash, fee);
}

function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override {
    randomResult = randomness;
}

// Commit-Reveal scheme  
function commit(bytes32 hash) external;

function reveal(uint value) external; 

function random() external view returns (uint) {
  // Use commit and reveal values to generate random number
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。