//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.25; contract GemLike { function balanceOf(address guy) external view returns (uint256); function transfer(address dst, uint256 wad) external returns (bool); } contract RiskyLike { function play(uint256 cup) external returns (bool); } contract TubLike { function cups(bytes32 cup) external view returns (address, uint, uint, uint); function draw(bytes32 cup, uint wad) public; function lock(bytes32 cup, uint wad) public; function open() public returns (bytes32 cup); function safe(bytes32 cup) external returns (bool); } contract Play { address public owner; GemLike public constant dai = GemLike(0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359); RiskyLike public constant risky = RiskyLike(0x7441cCE7039cb7B8f6fF6F4Ba5850cD655B12bA2); TubLike public constant tub = TubLike(0x448a5065aeBB8E423F0896E6c5D525C040f59af3); constructor(uint256 wad) public payable { owner = msg.sender; // open cdp bytes32 cup = tub.open(); // fund it tub.lock(cup, msg.value); // draw to make unsafe tub.draw(cup, wad); // play with cup risky.play(uint256(cup)); } modifier auth { require(msg.sender == owner, "you are not me!"); _; } function pullDai() external auth returns (bool) { uint wad = dai.balanceOf(address(this)); return dai.transfer(msg.sender, wad); } }
0.4.25