pragma solidity ^0.4.24; contract Proxy { address public implementation; constructor(address _address) public { implementation = _address; } function() external payable { address _impl = implementation; require(_impl != address(0x0)); assembly { let ptr := mload(0x40) calldatacopy(ptr, 0x0, calldatasize) let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0) returndatacopy(ptr, 0x0, returndatasize) switch result case 0 {revert(ptr, returndatasize)} default {return (ptr, returndatasize)} } } } contract Ownable { event OwnerChanged(address); address public implementation; address public owner; modifier onlyOwner() { require(msg.sender == owner); _; } function contructor() public { owner = msg.sender; } function change() public { owner = msg.sender; } function changeOwner(address newOwner) public onlyOwner { owner = newOwner; emit OwnerChanged(owner); } function renounceOwnership() public { assembly { sstore(0x0, 0x0) } } function isComplete() public view returns(bool) { return msg.sender == owner; } }
0.4.24