92 lines
2.4 KiB
Solidity
92 lines
2.4 KiB
Solidity
/*
|
|
|
|
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];
|
|
}
|
|
}
|