Skip to content

Instantly share code, notes, and snippets.

@finleyexp
Created January 21, 2020 17:43
Show Gist options
  • Select an option

  • Save finleyexp/facd1f11707bcc7839a91e335f451045 to your computer and use it in GitHub Desktop.

Select an option

Save finleyexp/facd1f11707bcc7839a91e335f451045 to your computer and use it in GitHub Desktop.

Revisions

  1. finleyexp created this gist Jan 21, 2020.
    63 changes: 63 additions & 0 deletions iGuess.sol
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,63 @@
    // DON'T USE. INTENDED FOR EDUCATIONAL PURPOSES ONLY. PLUS, it errors.
    // adapted from: https://tij.me/blog/scamming-people-via-ethereum-smart-contracts/

    pragma solidity >=0.4.24 <0.7.0;

    contract iGuess {

    uint256 private secretNumber;
    uint256 public lastPlayed;
    address public owner;

    struct Player {
    address addr;
    uint256 ethr;
    }

    Player[] players;

    constructor() public {
    // On construct set the owner and a random secret number
    owner = msg.sender;
    shuffle();
    }

    function guess(uint256 number) public payable {
    // Guessing costs a minimum of 0.0001 ether
    require(msg.value >= 0.0001 ether);

    // Guess must be between zero and ten
    require(number >= 0 && number <= 10);

    // Update the last played date
    lastPlayed = now;

    // Add player to the players list (added memory -- should I have used storage?)
    Player memory player;
    player.addr = msg.sender;
    player.ethr = msg.value;
    players.push(player);

    // Payout if guess is correct
    if (number == secretNumber) {
    address(this).balance;
    }

    // Refresh the secret number
    shuffle();
    }

    function shuffle() internal returns (uint) {
    // Randomly set secretNumber with a value between 1 and 10
    secretNumber = uint(keccak256(abi.encodePacked(now, msg.sender))) % 10 + 1;
    return secretNumber;
    }


    function kill() public {
    // Enable owner to kill the contract after 24 hours of inactivity
    if (msg.sender == owner && now > lastPlayed + 24 hours) {
    selfdestruct(msg.sender);
    }
    }
    }