|
@@ -11,13 +11,13 @@ import "./Ownable.sol";
|
|
|
* owner's death.
|
|
|
*/
|
|
|
contract Heritable is Ownable {
|
|
|
- address public heir;
|
|
|
+ address private heir_;
|
|
|
|
|
|
// Time window the owner has to notify they are alive.
|
|
|
- uint256 public heartbeatTimeout;
|
|
|
+ uint256 private heartbeatTimeout_;
|
|
|
|
|
|
// Timestamp of the owner's death, as pronounced by the heir.
|
|
|
- uint256 public timeOfDeath;
|
|
|
+ uint256 private timeOfDeath_;
|
|
|
|
|
|
event HeirChanged(address indexed owner, address indexed newHeir);
|
|
|
event OwnerHeartbeated(address indexed owner);
|
|
@@ -29,7 +29,7 @@ contract Heritable is Ownable {
|
|
|
* @dev Throw an exception if called by any account other than the heir's.
|
|
|
*/
|
|
|
modifier onlyHeir() {
|
|
|
- require(msg.sender == heir);
|
|
|
+ require(msg.sender == heir_);
|
|
|
_;
|
|
|
}
|
|
|
|
|
@@ -47,7 +47,23 @@ contract Heritable is Ownable {
|
|
|
require(newHeir != owner);
|
|
|
heartbeat();
|
|
|
HeirChanged(owner, newHeir);
|
|
|
- heir = newHeir;
|
|
|
+ heir_ = newHeir;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dev Use these getter functions to access the internal variables in
|
|
|
+ * an inherited contract.
|
|
|
+ */
|
|
|
+ function heir() public view returns(address) {
|
|
|
+ return heir_;
|
|
|
+ }
|
|
|
+
|
|
|
+ function heartbeatTimeout() public view returns(uint256) {
|
|
|
+ return heartbeatTimeout_;
|
|
|
+ }
|
|
|
+
|
|
|
+ function timeOfDeath() public view returns(uint256) {
|
|
|
+ return timeOfDeath_;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -55,7 +71,7 @@ contract Heritable is Ownable {
|
|
|
*/
|
|
|
function removeHeir() public onlyOwner {
|
|
|
heartbeat();
|
|
|
- heir = 0;
|
|
|
+ heir_ = 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -64,8 +80,8 @@ contract Heritable is Ownable {
|
|
|
*/
|
|
|
function proclaimDeath() public onlyHeir {
|
|
|
require(ownerLives());
|
|
|
- OwnerProclaimedDead(owner, heir, timeOfDeath);
|
|
|
- timeOfDeath = now;
|
|
|
+ OwnerProclaimedDead(owner, heir_, timeOfDeath_);
|
|
|
+ timeOfDeath_ = block.timestamp;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -73,7 +89,7 @@ contract Heritable is Ownable {
|
|
|
*/
|
|
|
function heartbeat() public onlyOwner {
|
|
|
OwnerHeartbeated(owner);
|
|
|
- timeOfDeath = 0;
|
|
|
+ timeOfDeath_ = 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -81,19 +97,19 @@ contract Heritable is Ownable {
|
|
|
*/
|
|
|
function claimHeirOwnership() public onlyHeir {
|
|
|
require(!ownerLives());
|
|
|
- require(now >= timeOfDeath + heartbeatTimeout);
|
|
|
- OwnershipTransferred(owner, heir);
|
|
|
- HeirOwnershipClaimed(owner, heir);
|
|
|
- owner = heir;
|
|
|
- timeOfDeath = 0;
|
|
|
+ require(block.timestamp >= timeOfDeath_ + heartbeatTimeout_);
|
|
|
+ OwnershipTransferred(owner, heir_);
|
|
|
+ HeirOwnershipClaimed(owner, heir_);
|
|
|
+ owner = heir_;
|
|
|
+ timeOfDeath_ = 0;
|
|
|
}
|
|
|
|
|
|
function setHeartbeatTimeout(uint256 newHeartbeatTimeout) internal onlyOwner {
|
|
|
require(ownerLives());
|
|
|
- heartbeatTimeout = newHeartbeatTimeout;
|
|
|
+ heartbeatTimeout_ = newHeartbeatTimeout;
|
|
|
}
|
|
|
|
|
|
function ownerLives() internal view returns (bool) {
|
|
|
- return timeOfDeath == 0;
|
|
|
+ return timeOfDeath_ == 0;
|
|
|
}
|
|
|
}
|