From 9f974667a739b6a7ff42c6c51d143786c1352e31 Mon Sep 17 00:00:00 2001 From: mingda Date: Wed, 8 Jul 2020 17:53:01 +0800 Subject: [PATCH] [audit]#5 add claim ownership to ownable contract --- contracts/intf/IDODO.sol | 3 ++- contracts/lib/Ownable.sol | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/contracts/intf/IDODO.sol b/contracts/intf/IDODO.sol index 5a21c29..c27119a 100644 --- a/contracts/intf/IDODO.sol +++ b/contracts/intf/IDODO.sol @@ -8,7 +8,6 @@ pragma solidity 0.6.9; pragma experimental ABIEncoderV2; - interface IDODO { function init( address supervisor, @@ -24,6 +23,8 @@ interface IDODO { function transferOwnership(address newOwner) external; + function claimOwnership() external; + function sellBaseToken(uint256 amount, uint256 minReceiveQuote) external returns (uint256); function buyBaseToken(uint256 amount, uint256 maxPayQuote) external returns (uint256); diff --git a/contracts/lib/Ownable.sol b/contracts/lib/Ownable.sol index da32aa8..68dcacf 100644 --- a/contracts/lib/Ownable.sol +++ b/contracts/lib/Ownable.sol @@ -16,9 +16,12 @@ pragma experimental ABIEncoderV2; */ contract Ownable { address public _OWNER_; + address public _NEW_OWNER_; // ============ Events ============ + event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // ============ Modifiers ============ @@ -37,7 +40,14 @@ contract Ownable { function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "INVALID_OWNER"); - emit OwnershipTransferred(_OWNER_, newOwner); - _OWNER_ = newOwner; + emit OwnershipTransferPrepared(_OWNER_, newOwner); + _NEW_OWNER_ = newOwner; + } + + function claimOwnership() external { + require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM"); + emit OwnershipTransferred(_OWNER_, _NEW_OWNER_); + _OWNER_ = _NEW_OWNER_; + _NEW_OWNER_ = address(0); } }