fix apdater && add approve proxy
This commit is contained in:
91
contracts/SmartRoute/DODOApproveProxy.sol
Normal file
91
contracts/SmartRoute/DODOApproveProxy.sol
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
|
||||
Copyright 2020 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.6.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import {IDODOApprove} from "../intf/IDODOApprove.sol";
|
||||
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
|
||||
|
||||
interface IDODOApproveProxy {
|
||||
function isAllowedProxy(address _proxy) external view returns (bool);
|
||||
function claimTokens(address token,address who,address dest,uint256 amount) external;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title DODOApproveProxy
|
||||
* @author DODO Breeder
|
||||
*
|
||||
* @notice Allow different version dodoproxy to claim from DODOApprove
|
||||
*/
|
||||
contract DODOApproveProxy is InitializableOwnable {
|
||||
|
||||
// ============ Storage ============
|
||||
uint256 private constant _TIMELOCK_DURATION_ = 3 days;
|
||||
mapping (address => bool) public _IS_ALLOWED_PROXY_;
|
||||
uint256 public _TIMELOCK_;
|
||||
address public _PENDING_ADD_DODO_PROXY_;
|
||||
address public immutable _DODO_APPROVE_;
|
||||
|
||||
// ============ Modifiers ============
|
||||
modifier notLocked() {
|
||||
require(
|
||||
_TIMELOCK_ <= block.timestamp,
|
||||
"SetProxy is timelocked"
|
||||
);
|
||||
_;
|
||||
}
|
||||
|
||||
constructor(address dodoApporve) public {
|
||||
_DODO_APPROVE_ = dodoApporve;
|
||||
}
|
||||
|
||||
function init(address owner, address[] memory proxies) external {
|
||||
initOwner(owner);
|
||||
for(uint i = 0; i < proxies.length; i++)
|
||||
_IS_ALLOWED_PROXY_[proxies[i]] = true;
|
||||
}
|
||||
|
||||
function unlockAddProxy(address newDodoProxy) public onlyOwner {
|
||||
_TIMELOCK_ = block.timestamp + _TIMELOCK_DURATION_;
|
||||
_PENDING_ADD_DODO_PROXY_ = newDodoProxy;
|
||||
}
|
||||
|
||||
function lockAddProxy() public onlyOwner {
|
||||
_PENDING_ADD_DODO_PROXY_ = address(0);
|
||||
_TIMELOCK_ = 0;
|
||||
}
|
||||
|
||||
|
||||
function addDODOProxy() external onlyOwner notLocked() {
|
||||
_IS_ALLOWED_PROXY_[_PENDING_ADD_DODO_PROXY_] = true;
|
||||
lockAddProxy();
|
||||
}
|
||||
|
||||
function removeDODOProxy (address oldDodoProxy) public onlyOwner {
|
||||
_IS_ALLOWED_PROXY_[oldDodoProxy] = false;
|
||||
}
|
||||
|
||||
function claimTokens(
|
||||
address token,
|
||||
address who,
|
||||
address dest,
|
||||
uint256 amount
|
||||
) external {
|
||||
require(_IS_ALLOWED_PROXY_[msg.sender], "DODOApproveProxy:Access restricted");
|
||||
IDODOApprove(_DODO_APPROVE_).claimTokens(
|
||||
token,
|
||||
who,
|
||||
dest,
|
||||
amount
|
||||
);
|
||||
}
|
||||
|
||||
function isAllowedProxy(address _proxy) external view returns (bool) {
|
||||
return _IS_ALLOWED_PROXY_[_proxy];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user