Ethernaut

【Ethernaut】03 – CoinFlip 鏈上隨機數永遠是我贏

【Ethernaut】03 – CoinFlip 鏈上隨機數永遠是我贏

文章目錄

  1. 題目
  2. 解法

1.題目

CoinFlip

這一關可以幫助你了解區塊鏈的隨機數不要隨意拿鏈上的。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract CoinFlip {

  uint256 public consecutiveWins;
  uint256 lastHash;
  uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968;

  constructor() {
    consecutiveWins = 0;
  }

  function flip(bool _guess) public returns (bool) {
    uint256 blockValue = uint256(blockhash(block.number - 1));

    if (lastHash == blockValue) {
      revert();
    }

    lastHash = blockValue;
    uint256 coinFlip = blockValue / FACTOR;
    bool side = coinFlip == 1 ? true : false;

    if (side == _guess) {
      consecutiveWins++;
      return true;
    } else {
      consecutiveWins = 0;
      return false;
    }
  }
}

2.解法

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *