Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 411 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Vault | 19749380 | 231 days ago | IN | 0 ETH | 0.00215827 | ||||
Create Vault | 19748525 | 231 days ago | IN | 0 ETH | 0.00256088 | ||||
Create Vault | 19746513 | 231 days ago | IN | 0 ETH | 0.00255822 | ||||
Create Vault | 19736844 | 232 days ago | IN | 0 ETH | 0.0027147 | ||||
Create Vault | 19736121 | 233 days ago | IN | 0 ETH | 0.00247778 | ||||
Create Vault | 19734025 | 233 days ago | IN | 0 ETH | 0.00678801 | ||||
Claim Fees | 19732670 | 233 days ago | IN | 0 ETH | 0.00478151 | ||||
Add Pool | 19732548 | 233 days ago | IN | 0 ETH | 0.00331996 | ||||
Create Vault | 19727067 | 234 days ago | IN | 0 ETH | 0.00552384 | ||||
Create Vault | 19704311 | 237 days ago | IN | 0 ETH | 0.00478473 | ||||
Create Vault | 19698111 | 238 days ago | IN | 0 ETH | 0.00503184 | ||||
Create Vault | 19694341 | 238 days ago | IN | 0 ETH | 0.00325588 | ||||
Create Vault | 19689874 | 239 days ago | IN | 0 ETH | 0.00644833 | ||||
Claim Fees | 19682400 | 240 days ago | IN | 0 ETH | 0.00373852 | ||||
Create Vault | 19670145 | 242 days ago | IN | 0 ETH | 0.00447977 | ||||
Create Vault | 19666470 | 242 days ago | IN | 0 ETH | 0.00366586 | ||||
Create Vault | 19657997 | 244 days ago | IN | 0 ETH | 0.00434128 | ||||
Create Vault | 19657979 | 244 days ago | IN | 0 ETH | 0.00361134 | ||||
Create Vault | 19657970 | 244 days ago | IN | 0 ETH | 0.00297541 | ||||
Create Vault | 19657956 | 244 days ago | IN | 0 ETH | 0.00386751 | ||||
Create Vault | 19655144 | 244 days ago | IN | 0 ETH | 0.00451319 | ||||
Create Vault | 19648060 | 245 days ago | IN | 0 ETH | 0.00842347 | ||||
Create Vault | 19647436 | 245 days ago | IN | 0 ETH | 0.00744049 | ||||
Checkpoint Fee R... | 19628908 | 248 days ago | IN | 0 ETH | 0.00199104 | ||||
Claim Fees | 19628883 | 248 days ago | IN | 0 ETH | 0.00396951 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Booster
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; import "./interfaces/IStaker.sol"; import "./interfaces/IPoolRegistry.sol"; import "./interfaces/IProxyVault.sol"; import "./interfaces/IProxyOwner.sol"; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; /* Main interface for the whitelisted proxy contract. **This contract is meant to be able to be replaced for upgrade purposes. use IVoterProxy.operator() to always reference the current booster */ contract Booster{ using SafeERC20 for IERC20; address public constant fxs = address(0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0); address public immutable proxy; address public immutable poolRegistry; address public immutable feeRegistry; address public owner; address public pendingOwner; address public poolManager; address public rewardManager; address public voteDelegate; address public feeclaimer; bool public isShutdown; address public feeQueue; mapping(address=>mapping(address=>bool)) public feeClaimMap; mapping(address=>address) public proxyOwners; constructor(address _proxy, address _poolReg, address _feeReg) { proxy = _proxy; poolRegistry = _poolReg; feeRegistry = _feeReg; isShutdown = false; owner = msg.sender; rewardManager = msg.sender; poolManager = msg.sender; voteDelegate = msg.sender; //TODO: consider moving to a module so dont have to set everything again if upgraded feeclaimer = address(0);//msg.sender; feeClaimMap[address(0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872)][fxs] = true; emit FeeClaimPairSet(address(0xc6764e58b36e26b08Fd1d2AeD4538c02171fA872), fxs, true); feeQueue = address(0xa1b72482cF45a6F4a0A7EE1DafFdbc66E243622a); emit FeeQueueChanged(address(0xa1b72482cF45a6F4a0A7EE1DafFdbc66E243622a)); //set our proxy as its own owner proxyOwners[_proxy] = _proxy; //temple proxyOwners[address(0xC0223fB0562555Bec938de5363D63EDd65102283)] = address(0x4A136F836961860E599d9BF6e03BBb4BcD0E39dd); } /////// Owner Section ///////// modifier onlyOwner() { require(owner == msg.sender, "!auth"); _; } modifier onlyPoolManager() { require(poolManager == msg.sender, "!auth"); _; } //set pending owner function setPendingOwner(address _po) external onlyOwner{ pendingOwner = _po; emit SetPendingOwner(_po); } function _proxyCall(address _to, bytes memory _data) internal{ (bool success,) = IStaker(proxy).execute(_to,uint256(0),_data); require(success, "Proxy Call Fail"); } //claim ownership function acceptPendingOwner() external { require(pendingOwner != address(0) && msg.sender == pendingOwner, "!p_owner"); owner = pendingOwner; pendingOwner = address(0); emit OwnerChanged(owner); } //set fee queue, a contract fees are moved to when claiming function setFeeQueue(address _queue) external onlyOwner{ feeQueue = _queue; emit FeeQueueChanged(_queue); } //set who can call claim fees, 0x0 address will allow anyone to call function setFeeClaimer(address _claimer) external onlyOwner{ feeclaimer = _claimer; emit FeeClaimerChanged(_claimer); } function setFeeClaimPair(address _claimAddress, address _token, bool _active) external onlyOwner{ feeClaimMap[_claimAddress][_token] = _active; emit FeeClaimPairSet(_claimAddress, _token, _active); } function addProxyOwner(address _proxy, address _owner) external onlyOwner{ proxyOwners[_proxy] = _owner; emit ProxyOwnerSet(_proxy, _owner); } //set a reward manager address that controls extra reward contracts for each pool function setRewardManager(address _rmanager) external onlyOwner{ rewardManager = _rmanager; emit RewardManagerChanged(_rmanager); } //set pool manager function setPoolManager(address _pmanager) external onlyOwner{ poolManager = _pmanager; emit PoolManagerChanged(_pmanager); } //shutdown this contract. function shutdownSystem() external onlyOwner{ //This version of booster does not require any special steps before shutting down //and can just immediately be set. isShutdown = true; emit Shutdown(); } //claim operator roles for certain systems for direct access function claimOperatorRoles() external onlyOwner{ require(!isShutdown,"shutdown"); //claim operator role of pool registry bytes memory data = abi.encodeWithSelector(bytes4(keccak256("setOperator(address)")), address(this)); _proxyCall(poolRegistry,data); } //set fees on user vaults function setPoolFees(uint256 _cvxfxs, uint256 _cvx, uint256 _platform) external onlyOwner{ require(!isShutdown,"shutdown"); bytes memory data = abi.encodeWithSelector(bytes4(keccak256("setFees(uint256,uint256,uint256)")), _cvxfxs, _cvx, _platform); _proxyCall(feeRegistry,data); } //set fee deposit address for all user vaults function setPoolFeeDeposit(address _deposit) external onlyOwner{ require(!isShutdown,"shutdown"); bytes memory data = abi.encodeWithSelector(bytes4(keccak256("setDepositAddress(address)")), _deposit); _proxyCall(feeRegistry,data); } //add pool on registry function addPool(address _implementation, address _stakingAddress, address _stakingToken) external onlyPoolManager{ IPoolRegistry(poolRegistry).addPool(_implementation, _stakingAddress, _stakingToken); } //set a new reward pool implementation for future pools function setPoolRewardImplementation(address _impl) external onlyPoolManager{ IPoolRegistry(poolRegistry).setRewardImplementation(_impl); } //deactivate a pool function deactivatePool(uint256 _pid) external onlyPoolManager{ IPoolRegistry(poolRegistry).deactivatePool(_pid); } //set extra reward contracts to be active when pools are created function setRewardActiveOnCreation(bool _active) external onlyPoolManager{ IPoolRegistry(poolRegistry).setRewardActiveOnCreation(_active); } //vote for gauge weights function voteGaugeWeight(address _controller, address[] calldata _gauge, uint256[] calldata _weight) external onlyOwner{ for(uint256 i = 0; i < _gauge.length; ){ bytes memory data = abi.encodeWithSelector(bytes4(keccak256("vote_for_gauge_weights(address,uint256)")), _gauge[i], _weight[i]); _proxyCall(_controller,data); unchecked{ ++i; } } } //set snapshot voting delegate function setDelegate(address _delegateContract, address _delegate, bytes32 _space) external onlyOwner{ bytes memory data = abi.encodeWithSelector(bytes4(keccak256("setDelegate(bytes32,address)")), _space, _delegate); _proxyCall(_delegateContract,data); emit DelegateSet(_delegate); } //set on chain governance voting delegate function setOnChainDelegate(address _delegateContract, address _delegate) external onlyOwner{ bytes memory data = abi.encodeWithSelector(bytes4(keccak256("delegate(address)")), _delegate); _proxyCall(_delegateContract,data); voteDelegate = _delegate; emit OnChainDelegateSet(_delegate); } function castVote(address _votingContract, uint256 _proposalId, bool _support) external{ require(msg.sender == voteDelegate, "!voteDelegate"); bytes memory data = abi.encodeWithSelector(bytes4(keccak256("castVote(uint256,uint8)")), _proposalId, _support?uint8(1):uint8(0)); _proxyCall(_votingContract,data); } //recover tokens on this contract function recoverERC20(address _tokenAddress, uint256 _tokenAmount, address _withdrawTo) external onlyOwner{ IERC20(_tokenAddress).safeTransfer(_withdrawTo, _tokenAmount); emit Recovered(_tokenAddress, _tokenAmount); } //manually set vefxs proxy for a given vault function setVeFXSProxy(address _vault, address _newproxy) external{ require(!isShutdown,"shutdown"); //get owner of vault address vaultOwner = IProxyVault(_vault).owner(); //require vault owner or convex admin to call require(vaultOwner == msg.sender || owner == msg.sender, "!auth" ); //require new proxy to be known require(proxyOwners[_newproxy] != address(0),"!proxy"); //call checkpoint to checkpoint rewards with current boost bytes memory data = abi.encodeWithSelector(bytes4(keccak256("checkpointRewards()"))); _proxyCall(_vault,data); //get current proxy address currentProxy = IProxyVault(_vault).usingProxy(); //tell current proxy admin to remove if(currentProxy == proxy){ //proxy is currently convex, call internal data = abi.encodeWithSelector(bytes4(keccak256("proxyToggleStaker(address)")), _vault); _proxyCall(IProxyVault(_vault).stakingAddress(),data); }else{ //get proxy owner from list IProxyOwner(proxyOwners[currentProxy]).proxyToggleStaker(_vault); } //tell next proxy admin to add if(_newproxy == proxy){ //new proxy is convex, call internal data = abi.encodeWithSelector(bytes4(keccak256("proxyToggleStaker(address)")), _vault); _proxyCall(IProxyVault(_vault).stakingAddress(),data); }else{ //get proxy owner from list IProxyOwner(proxyOwners[_newproxy]).proxyToggleStaker(_vault); } //set proxy on vault data = abi.encodeWithSelector(bytes4(keccak256("setVeFXSProxy(address)")), _newproxy); _proxyCall(_vault,data); //call get rewards to checkpoint with new boosted weight //should be a bit cheaper than call above since there should be no token transfers in second call data = abi.encodeWithSelector(bytes4(keccak256("checkpointRewards()"))); _proxyCall(_vault,data); } //recover tokens on the proxy function recoverERC20FromProxy(address _tokenAddress, uint256 _tokenAmount, address _withdrawTo) external onlyOwner{ bytes memory data = abi.encodeWithSelector(bytes4(keccak256("transfer(address,uint256)")), _withdrawTo, _tokenAmount); _proxyCall(_tokenAddress,data); emit Recovered(_tokenAddress, _tokenAmount); } //////// End Owner Section /////////// function createVault(uint256 _pid) external returns (address){ //create minimal proxy vault for specified pool (address vault, address stakeAddress, address stakeToken, address rewards) = IPoolRegistry(poolRegistry).addUserVault(_pid, msg.sender); //make voterProxy call proxyToggleStaker(vault) on the pool's stakingAddress to set it as a proxied child bytes memory data = abi.encodeWithSelector(bytes4(keccak256("proxyToggleStaker(address)")), vault); _proxyCall(stakeAddress,data); //call proxy initialize IProxyVault(vault).initialize(msg.sender, stakeAddress, stakeToken, rewards); //set vault vefxs proxy data = abi.encodeWithSelector(bytes4(keccak256("setVeFXSProxy(address)")), proxy); _proxyCall(vault,data); return vault; } //claim fees - if set, move to a fee queue that rewards can pull from function claimFees(address _distroContract, address _token) external { require(feeclaimer == address(0) || feeclaimer == msg.sender, "!auth"); require(feeClaimMap[_distroContract][_token],"!claimPair"); uint256 bal; if(feeQueue != address(0)){ bal = IStaker(proxy).claimFees(_distroContract, _token, feeQueue); }else{ bal = IStaker(proxy).claimFees(_distroContract, _token, address(this)); } emit FeesClaimed(bal); } //call vefxs checkpoint function checkpointFeeRewards(address _distroContract) external { require(feeclaimer == address(0) || feeclaimer == msg.sender, "!auth"); IStaker(proxy).checkpointFeeRewards(_distroContract); } /* ========== EVENTS ========== */ event SetPendingOwner(address indexed _address); event OwnerChanged(address indexed _address); event FeeQueueChanged(address indexed _address); event FeeClaimerChanged(address indexed _address); event FeeClaimPairSet(address indexed _address, address indexed _token, bool _value); event ProxyOwnerSet(address indexed _address, address _owner); event RewardManagerChanged(address indexed _address); event PoolManagerChanged(address indexed _address); event Shutdown(); event DelegateSet(address indexed _address); event OnChainDelegateSet(address indexed _address); event FeesClaimed(uint256 _amount); event Recovered(address indexed _token, uint256 _amount); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; interface IStaker{ function createLock(uint256, uint256) external returns (bool); function increaseAmount(uint256) external returns (bool); function increaseTime(uint256) external returns (bool); function release() external returns (bool); function checkpointFeeRewards(address) external; function claimFees(address,address,address) external returns (uint256); function voteGaugeWeight(address,uint256) external returns (bool); function operator() external view returns (address); function execute(address _to, uint256 _value, bytes calldata _data) external returns (bool, bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; interface IProxyVault { enum VaultType{ Erc20Basic, UniV3, Convex, Erc20Joint } function initialize(address _owner, address _stakingAddress, address _stakingToken, address _rewardsAddress) external; function usingProxy() external returns(address); function owner() external returns(address); function stakingAddress() external returns(address); function rewards() external returns(address); function getReward() external; function getReward(bool _claim) external; function getReward(bool _claim, address[] calldata _rewardTokenList) external; function earned() external returns (address[] memory token_addresses, uint256[] memory total_earned); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; interface IProxyOwner { function proxyToggleStaker(address _vault) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; interface IPoolRegistry { function poolLength() external view returns(uint256); function poolInfo(uint256 _pid) external view returns(address, address, address, uint8); function vaultMap(uint256 _pid, address _user) external view returns(address vault); function addUserVault(uint256 _pid, address _user) external returns(address vault, address stakeAddress, address stakeToken, address rewards); function deactivatePool(uint256 _pid) external; function addPool(address _implementation, address _stakingAddress, address _stakingToken) external; function setRewardActiveOnCreation(bool _active) external; function setRewardImplementation(address _imp) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_proxy","type":"address"},{"internalType":"address","name":"_poolReg","type":"address"},{"internalType":"address","name":"_feeReg","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"DelegateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"FeeClaimPairSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"FeeClaimerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"FeeQueueChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"FeesClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"OnChainDelegateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"PoolManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"}],"name":"ProxyOwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"RewardManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"SetPendingOwner","type":"event"},{"anonymous":false,"inputs":[],"name":"Shutdown","type":"event"},{"inputs":[],"name":"acceptPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"address","name":"_stakingAddress","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"name":"addProxyOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_votingContract","type":"address"},{"internalType":"uint256","name":"_proposalId","type":"uint256"},{"internalType":"bool","name":"_support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distroContract","type":"address"}],"name":"checkpointFeeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distroContract","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOperatorRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"createVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"deactivatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"feeClaimMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeQueue","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeclaimer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isShutdown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proxyOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"address","name":"_withdrawTo","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"address","name":"_withdrawTo","type":"address"}],"name":"recoverERC20FromProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_delegateContract","type":"address"},{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"bytes32","name":"_space","type":"bytes32"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_claimAddress","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"setFeeClaimPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_claimer","type":"address"}],"name":"setFeeClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_queue","type":"address"}],"name":"setFeeQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegateContract","type":"address"},{"internalType":"address","name":"_delegate","type":"address"}],"name":"setOnChainDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_po","type":"address"}],"name":"setPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_deposit","type":"address"}],"name":"setPoolFeeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cvxfxs","type":"uint256"},{"internalType":"uint256","name":"_cvx","type":"uint256"},{"internalType":"uint256","name":"_platform","type":"uint256"}],"name":"setPoolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pmanager","type":"address"}],"name":"setPoolManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_impl","type":"address"}],"name":"setPoolRewardImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"setRewardActiveOnCreation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rmanager","type":"address"}],"name":"setRewardManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_newproxy","type":"address"}],"name":"setVeFXSProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shutdownSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voteDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address[]","name":"_gauge","type":"address[]"},{"internalType":"uint256[]","name":"_weight","type":"uint256[]"}],"name":"voteGaugeWeight","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620029743803806200297483398101604081905262000034916200023e565b6001600160a01b0383811660805282811660a052811660c0526005805460008054336001600160a01b0319918216811783556003805483168217905560028054831682179055600480549092161790556001600160a81b0319909116909155733432b6a60d23ca0dfca7761b7ab56459d9c964d0908190527f41058fa809ce8016bdb9ea28dbb86d57e319d16d7c99a6d1eea2d4fa86e14e2160209081527f9b0fdfa51b975c05d70278be7a44cf3b15d6db4988861cf66757c9bfff4268a8805460ff1916600190811790915560405190815273c6764e58b36e26b08fd1d2aed4538c02171fa872917f557db96d9548e1dbd495296a46aba146ff5e2420be6460519688cbd366f1a427910160405180910390a3600680546001600160a01b03191673a1b72482cf45a6f4a0a7ee1daffdbc66e243622a9081179091556040517fee58b2ec759bf63301361bbf3ae13e1923996d6493ef4e5825537b817443fbb390600090a250506001600160a01b0316600081815260086020526040812080546001600160a01b0319908116909317905573c0223fb0562555bec938de5363d63edd6510228390527fd69c458be7ac569b618b2b7b8b268013138c9a4bd57735f950cb64e131a1e5d58054909116734a136f836961860e599d9bf6e03bbb4bcd0e39dd17905562000288565b80516001600160a01b03811681146200023957600080fd5b919050565b6000806000606084860312156200025457600080fd5b6200025f8462000221565b92506200026f6020850162000221565b91506200027f6040850162000221565b90509250925092565b60805160a05160c051612653620003216000396000818161046d0152818161067101526115040152600081816104460152818161072f0152818161137b0152818161171301528181611929015281816119a90152611a310152600081816105a70152818161091301528181610a6d01528181610f0801528181610fab01528181611439015281816118530152611d5201526126536000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806399f4a3891161013b578063c3accd48116100b8578063dc4c90d31161007c578063dc4c90d31461053b578063e2a093f91461054e578063e30c397814610561578063e489e72d14610574578063ec556889146105a257600080fd5b8063c3accd48146104c6578063c42069ec146104d9578063cc6212b0146104ec578063d3051bc014610515578063d579bb531461052857600080fd5b8063aba65098116100ff578063aba650981461042e578063afcff50f14610441578063b3a408b814610468578063b51609b41461048f578063bf86d690146104a257600080fd5b806399f4a389146103da5780639abbdf4b146103e25780639abd9b05146103f55780639f00332b14610408578063a35412711461041b57600080fd5b806338178d95116101c95780637aef67151161018d5780637aef6715146103735780637d423446146103865780638b474025146103a15780638da5cb5b146103b45780639066cfb7146103c757600080fd5b806338178d95146103145780633b788da9146103275780633fd467861461033a5780635b6151371461034d5780635f426cc01461036057600080fd5b806312d320c51161021057806312d320c5146102c0578063153ee554146102d35780632dbfa735146102e6578063333f3912146102f9578063354af9191461030c57600080fd5b8063036111531461024d5780630a1d999f146102625780630cc5005c1461026a5780630f4ef8a61461027d5780630fd787b5146102ad575b600080fd5b61026061025b3660046120a0565b6105c9565b005b61026061069c565b6102606102783660046120e1565b610757565b600354610290906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102606102bb3660046120e1565b610c4c565b6102606102ce366004612128565b610cdd565b6102606102e136600461216a565b610dae565b6102606102f43660046120e1565b610e22565b6102606103073660046121d3565b611053565b610260611157565b6102606103223660046120e1565b6111bf565b610260610335366004612256565b611282565b610260610348366004612297565b61133a565b61026061035b36600461216a565b6113dc565b61026061036e36600461216a565b611468565b61026061038136600461216a565b61152d565b610290733432b6a60d23ca0dfca7761b7ab56459d9c964d081565b6102606103af3660046122b4565b6115a1565b600054610290906001600160a01b031681565b600654610290906001600160a01b031681565b610260611638565b6102906103f03660046122f4565b6116e4565b6102606104033660046122f4565b6118e9565b600454610290906001600160a01b031681565b61026061042936600461216a565b611960565b61026061043c36600461230d565b6119d8565b6102907f000000000000000000000000000000000000000000000000000000000000000081565b6102907f000000000000000000000000000000000000000000000000000000000000000081565b61026061049d36600461234d565b611a92565b6005546104b690600160a01b900460ff1681565b60405190151581526020016102a4565b6102606104d436600461216a565b611b18565b6102606104e736600461216a565b611b8c565b6102906104fa36600461216a565b6008602052600090815260409020546001600160a01b031681565b61026061052336600461216a565b611c00565b61026061053636600461234d565b611c74565b600254610290906001600160a01b031681565b600554610290906001600160a01b031681565b600154610290906001600160a01b031681565b6104b66105823660046120e1565b600760209081526000928352604080842090915290825290205460ff1681565b6102907f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146105fc5760405162461bcd60e51b81526004016105f390612384565b60405180910390fd5b600554600160a01b900460ff16156106265760405162461bcd60e51b81526004016105f3906123a3565b60408051602481018590526044810184905260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663cec10c1160e01b1790526106967f000000000000000000000000000000000000000000000000000000000000000082611d38565b50505050565b6000546001600160a01b031633146106c65760405162461bcd60e51b81526004016105f390612384565b600554600160a01b900460ff16156106f05760405162461bcd60e51b81526004016105f3906123a3565b60408051306024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663b3ab15fb60e01b1790526107547f000000000000000000000000000000000000000000000000000000000000000082611d38565b50565b600554600160a01b900460ff16156107815760405162461bcd60e51b81526004016105f3906123a3565b6000826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e791906123c5565b90506001600160a01b03811633148061080a57506000546001600160a01b031633145b6108265760405162461bcd60e51b81526004016105f390612384565b6001600160a01b03828116600090815260086020526040902054166108765760405162461bcd60e51b81526020600482015260066024820152652170726f787960d01b60448201526064016105f3565b6040805160048152602481019091526020810180516001600160e01b031663152aa42160e11b1790526108a98482611d38565b6000846001600160a01b031663d7c04a466040518163ffffffff1660e01b81526004016020604051808303816000875af11580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f91906123c5565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614156109fc57604080516001600160a01b03871660248083018290528351808403909101815260449092018352602080830180516001600160e01b03166373f982c160e11b17905283516335ed2f8960e21b815293519295506109f793919263d7b4be2492600480820193929182900301816000875af11580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f191906123c5565b83611d38565b610a6b565b6001600160a01b03818116600090815260086020526040908190205490516373f982c160e11b8152878316600482015291169063e7f3058290602401600060405180830381600087803b158015610a5257600080fd5b505af1158015610a66573d6000803e3d6000fd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610b2c57604080516001600160a01b03871660248083018290528351808403909101815260449092018352602080830180516001600160e01b03166373f982c160e11b17905283516335ed2f8960e21b81529351929550610b2793919263d7b4be2492600480820193929182900301816000875af11580156109cd573d6000803e3d6000fd5b610b9b565b6001600160a01b03848116600090815260086020526040908190205490516373f982c160e11b8152878316600482015291169063e7f3058290602401600060405180830381600087803b158015610b8257600080fd5b505af1158015610b96573d6000803e3d6000fd5b505050505b6040516001600160a01b03851660248201527f641a6cd0b01d626ff79f5bf07316ecb119eca316f9670e73b1e2c17c65b136749060440160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529150610c108583611d38565b6040805160048152602481019091526020810180516001600160e01b031663152aa42160e11b1790529150610c458583611d38565b5050505050565b6000546001600160a01b03163314610c765760405162461bcd60e51b81526004016105f390612384565b6001600160a01b0382811660008181526008602090815260409182902080546001600160a01b0319169486169485179055905192835290917fb91b1bd9de2775f6673be2dbf6acc1d0d524f3b2b4e547eaab3b770a6b8d617e910160405180910390a25050565b6004546001600160a01b03163314610d275760405162461bcd60e51b815260206004820152600d60248201526c21766f746544656c656761746560981b60448201526064016105f3565b60007f567813887e9a02f0fdc9e5cce34dad3f5e8ac785aa0259ba5d30339dd056cd238383610d57576000610d5a565b60015b604051602481019290925260ff16604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506106968482611d38565b6000546001600160a01b03163314610dd85760405162461bcd60e51b81526004016105f390612384565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f3ca93d0ab216ddc34a69d5e754afd4c484dc270149e769b81e9c4d244ce6a56a90600090a250565b6005546001600160a01b03161580610e4457506005546001600160a01b031633145b610e605760405162461bcd60e51b81526004016105f390612384565b6001600160a01b0380831660009081526007602090815260408083209385168352929052205460ff16610ec25760405162461bcd60e51b815260206004820152600a60248201526910b1b630b4b6a830b4b960b11b60448201526064016105f3565b6006546000906001600160a01b031615610f7e5760065460405163af688fed60e01b81526001600160a01b038581166004830152848116602483015291821660448201527f00000000000000000000000000000000000000000000000000000000000000009091169063af688fed906064016020604051808303816000875af1158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7791906123e2565b905061101b565b60405163af688fed60e01b81526001600160a01b03848116600483015283811660248301523060448301527f0000000000000000000000000000000000000000000000000000000000000000169063af688fed906064016020604051808303816000875af1158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101891906123e2565b90505b6040518181527f83db9dc084973306ecd0b0f10cb495b81dd9ddcc135eb7934d2723bcabc8f4c39060200160405180910390a1505050565b6000546001600160a01b0316331461107d5760405162461bcd60e51b81526004016105f390612384565b60005b8381101561114f5760007fd7136328d183ca84da1077f1bb26d5301594537a6b326c5831b74e07229dc2898686848181106110bd576110bd6123fb565b90506020020160208101906110d2919061216a565b8585858181106110e4576110e46123fb565b6040516001600160a01b039094166024850152602002919091013560448301525060640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506111468782611d38565b50600101611080565b505050505050565b6000546001600160a01b031633146111815760405162461bcd60e51b81526004016105f390612384565b6005805460ff60a01b1916600160a01b1790556040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf890600090a1565b6000546001600160a01b031633146111e95760405162461bcd60e51b81526004016105f390612384565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166317066a5760e21b1790526112368382611d38565b600480546001600160a01b0319166001600160a01b0384169081179091556040517ffe3d977891d8a37d81321b525b70781640d7bca89d42a9ca844204831a87944390600090a2505050565b6000546001600160a01b031633146112ac5760405162461bcd60e51b81526004016105f390612384565b60408051602481018390526001600160a01b0384166044808301919091528251808303909101815260649091019091526020810180516001600160e01b03166317b0dca160e31b1790526113008482611d38565b6040516001600160a01b038416907f2bb25fbb42d8e727aa4821b933cc09877ef371e86860cb18c52f8fda3cf18b5c90600090a250505050565b6002546001600160a01b031633146113645760405162461bcd60e51b81526004016105f390612384565b604051631fea33c360e11b815281151560048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633fd46786906024015b600060405180830381600087803b1580156113c857600080fd5b505af1158015610c45573d6000803e3d6000fd5b6005546001600160a01b031615806113fe57506005546001600160a01b031633145b61141a5760405162461bcd60e51b81526004016105f390612384565b604051635b61513760e01b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690635b615137906024016113ae565b6000546001600160a01b031633146114925760405162461bcd60e51b81526004016105f390612384565b600554600160a01b900460ff16156114bc5760405162461bcd60e51b81526004016105f3906123a3565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663ab18af2760e01b1790526115297f000000000000000000000000000000000000000000000000000000000000000082611d38565b5050565b6000546001600160a01b031633146115575760405162461bcd60e51b81526004016105f390612384565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fe53395243914ebc025ce712146f66fa5e9d3f04b308fae19ac4123350d1cd20f90600090a250565b6000546001600160a01b031633146115cb5760405162461bcd60e51b81526004016105f390612384565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f557db96d9548e1dbd495296a46aba146ff5e2420be6460519688cbd366f1a427910160405180910390a3505050565b6001546001600160a01b03161580159061165c57506001546001600160a01b031633145b6116935760405162461bcd60e51b815260206004820152600860248201526710b82fb7bbb732b960c11b60448201526064016105f3565b60018054600080546001600160a01b0383166001600160a01b031991821681178355921690925560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a2565b60405163f2bc788b60e01b81526004810182905233602482015260009081908190819081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f2bc788b906044016080604051808303816000875af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190612411565b604080516001600160a01b0386166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166373f982c160e11b179052939750919550935091506117d78482611d38565b604051637c643b2f60e11b81523360048201526001600160a01b0385811660248301528481166044830152838116606483015286169063f8c8765e90608401600060405180830381600087803b15801561183057600080fd5b505af1158015611844573d6000803e3d6000fd5b50506040516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201527f641a6cd0b01d626ff79f5bf07316ecb119eca316f9670e73b1e2c17c65b136749250604401905060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506118de8582611d38565b509295945050505050565b6002546001600160a01b031633146119135760405162461bcd60e51b81526004016105f390612384565b604051639abd9b0560e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639abd9b05906024016113ae565b6002546001600160a01b0316331461198a5760405162461bcd60e51b81526004016105f390612384565b604051637d2c770160e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fa58ee02906024016113ae565b6002546001600160a01b03163314611a025760405162461bcd60e51b81526004016105f390612384565b604051631574ca1360e31b81526001600160a01b038481166004830152838116602483015282811660448301527f0000000000000000000000000000000000000000000000000000000000000000169063aba6509890606401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611abc5760405162461bcd60e51b81526004016105f390612384565b611ad06001600160a01b0384168284611e19565b826001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2883604051611b0b91815260200190565b60405180910390a2505050565b6000546001600160a01b03163314611b425760405162461bcd60e51b81526004016105f390612384565b600580546001600160a01b0319166001600160a01b0383169081179091556040517f32af58d4c20240741a60b73ddef3d9160697f4d27297812b8583b298febc72ba90600090a250565b6000546001600160a01b03163314611bb65760405162461bcd60e51b81526004016105f390612384565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f5f4861af37461865f168c6e320428b3141f409a1763bd61b6359d38ad38ae74c90600090a250565b6000546001600160a01b03163314611c2a5760405162461bcd60e51b81526004016105f390612384565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fee58b2ec759bf63301361bbf3ae13e1923996d6493ef4e5825537b817443fbb390600090a250565b6000546001600160a01b03163314611c9e5760405162461bcd60e51b81526004016105f390612384565b604080516001600160a01b038316602482015260448082018590528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611cef8482611d38565b836001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2884604051611d2a91815260200190565b60405180910390a250505050565b604051635b0e93fb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b61d27f690611d8b908690859087906004016124c8565b6000604051808303816000875af1158015611daa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dd2919081019061250e565b50905080611e145760405162461bcd60e51b815260206004820152600f60248201526e141c9bde1e4810d85b1b0811985a5b608a1b60448201526064016105f3565b505050565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152611e1492869291600091611ea9918516908490611f26565b805190915015611e145780806020019051810190611ec791906125d1565b611e145760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f3565b6060611f358484600085611f3f565b90505b9392505050565b606082471015611fa05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105f3565b843b611fee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f3565b600080866001600160a01b0316858760405161200a91906125ee565b60006040518083038185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b509150915061205c828286612067565b979650505050505050565b60608315612076575081611f38565b8251156120865782518084602001fd5b8160405162461bcd60e51b81526004016105f3919061260a565b6000806000606084860312156120b557600080fd5b505081359360208301359350604090920135919050565b6001600160a01b038116811461075457600080fd5b600080604083850312156120f457600080fd5b82356120ff816120cc565b9150602083013561210f816120cc565b809150509250929050565b801515811461075457600080fd5b60008060006060848603121561213d57600080fd5b8335612148816120cc565b925060208401359150604084013561215f8161211a565b809150509250925092565b60006020828403121561217c57600080fd5b8135611f38816120cc565b60008083601f84011261219957600080fd5b50813567ffffffffffffffff8111156121b157600080fd5b6020830191508360208260051b85010111156121cc57600080fd5b9250929050565b6000806000806000606086880312156121eb57600080fd5b85356121f6816120cc565b9450602086013567ffffffffffffffff8082111561221357600080fd5b61221f89838a01612187565b9096509450604088013591508082111561223857600080fd5b5061224588828901612187565b969995985093965092949392505050565b60008060006060848603121561226b57600080fd5b8335612276816120cc565b92506020840135612286816120cc565b929592945050506040919091013590565b6000602082840312156122a957600080fd5b8135611f388161211a565b6000806000606084860312156122c957600080fd5b83356122d4816120cc565b925060208401356122e4816120cc565b9150604084013561215f8161211a565b60006020828403121561230657600080fd5b5035919050565b60008060006060848603121561232257600080fd5b833561232d816120cc565b9250602084013561233d816120cc565b9150604084013561215f816120cc565b60008060006060848603121561236257600080fd5b833561236d816120cc565b925060208401359150604084013561215f816120cc565b602080825260059082015264042c2eae8d60db1b604082015260600190565b60208082526008908201526739b43aba3237bbb760c11b604082015260600190565b6000602082840312156123d757600080fd5b8151611f38816120cc565b6000602082840312156123f457600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000806000806080858703121561242757600080fd5b8451612432816120cc565b6020860151909450612443816120cc565b6040860151909350612454816120cc565b6060860151909250612465816120cc565b939692955090935050565b60005b8381101561248b578181015183820152602001612473565b838111156106965750506000910152565b600081518084526124b4816020860160208601612470565b601f01601f19169290920160200192915050565b60018060a01b03841681528260208201526060604082015260006124ef606083018461249c565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561252157600080fd5b825161252c8161211a565b602084015190925067ffffffffffffffff8082111561254a57600080fd5b818501915085601f83011261255e57600080fd5b815181811115612570576125706124f8565b604051601f8201601f19908116603f01168101908382118183101715612598576125986124f8565b816040528281528860208487010111156125b157600080fd5b6125c2836020830160208801612470565b80955050505050509250929050565b6000602082840312156125e357600080fd5b8151611f388161211a565b60008251612600818460208701612470565b9190910192915050565b602081526000611f38602083018461249c56fea26469706673582212201e9175d22d78d5212cc05a15c3ef73c4915f9c67d5399deb2340e7aa3a88970864736f6c634300080a003300000000000000000000000059cfcd384746ec3035299d90782be065e466800b00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a69000000000000000000000000c9acb83ada68413a6aa57007bc720ee2e2b3c46d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806399f4a3891161013b578063c3accd48116100b8578063dc4c90d31161007c578063dc4c90d31461053b578063e2a093f91461054e578063e30c397814610561578063e489e72d14610574578063ec556889146105a257600080fd5b8063c3accd48146104c6578063c42069ec146104d9578063cc6212b0146104ec578063d3051bc014610515578063d579bb531461052857600080fd5b8063aba65098116100ff578063aba650981461042e578063afcff50f14610441578063b3a408b814610468578063b51609b41461048f578063bf86d690146104a257600080fd5b806399f4a389146103da5780639abbdf4b146103e25780639abd9b05146103f55780639f00332b14610408578063a35412711461041b57600080fd5b806338178d95116101c95780637aef67151161018d5780637aef6715146103735780637d423446146103865780638b474025146103a15780638da5cb5b146103b45780639066cfb7146103c757600080fd5b806338178d95146103145780633b788da9146103275780633fd467861461033a5780635b6151371461034d5780635f426cc01461036057600080fd5b806312d320c51161021057806312d320c5146102c0578063153ee554146102d35780632dbfa735146102e6578063333f3912146102f9578063354af9191461030c57600080fd5b8063036111531461024d5780630a1d999f146102625780630cc5005c1461026a5780630f4ef8a61461027d5780630fd787b5146102ad575b600080fd5b61026061025b3660046120a0565b6105c9565b005b61026061069c565b6102606102783660046120e1565b610757565b600354610290906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102606102bb3660046120e1565b610c4c565b6102606102ce366004612128565b610cdd565b6102606102e136600461216a565b610dae565b6102606102f43660046120e1565b610e22565b6102606103073660046121d3565b611053565b610260611157565b6102606103223660046120e1565b6111bf565b610260610335366004612256565b611282565b610260610348366004612297565b61133a565b61026061035b36600461216a565b6113dc565b61026061036e36600461216a565b611468565b61026061038136600461216a565b61152d565b610290733432b6a60d23ca0dfca7761b7ab56459d9c964d081565b6102606103af3660046122b4565b6115a1565b600054610290906001600160a01b031681565b600654610290906001600160a01b031681565b610260611638565b6102906103f03660046122f4565b6116e4565b6102606104033660046122f4565b6118e9565b600454610290906001600160a01b031681565b61026061042936600461216a565b611960565b61026061043c36600461230d565b6119d8565b6102907f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a6981565b6102907f000000000000000000000000c9acb83ada68413a6aa57007bc720ee2e2b3c46d81565b61026061049d36600461234d565b611a92565b6005546104b690600160a01b900460ff1681565b60405190151581526020016102a4565b6102606104d436600461216a565b611b18565b6102606104e736600461216a565b611b8c565b6102906104fa36600461216a565b6008602052600090815260409020546001600160a01b031681565b61026061052336600461216a565b611c00565b61026061053636600461234d565b611c74565b600254610290906001600160a01b031681565b600554610290906001600160a01b031681565b600154610290906001600160a01b031681565b6104b66105823660046120e1565b600760209081526000928352604080842090915290825290205460ff1681565b6102907f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b81565b6000546001600160a01b031633146105fc5760405162461bcd60e51b81526004016105f390612384565b60405180910390fd5b600554600160a01b900460ff16156106265760405162461bcd60e51b81526004016105f3906123a3565b60408051602481018590526044810184905260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663cec10c1160e01b1790526106967f000000000000000000000000c9acb83ada68413a6aa57007bc720ee2e2b3c46d82611d38565b50505050565b6000546001600160a01b031633146106c65760405162461bcd60e51b81526004016105f390612384565b600554600160a01b900460ff16156106f05760405162461bcd60e51b81526004016105f3906123a3565b60408051306024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663b3ab15fb60e01b1790526107547f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a6982611d38565b50565b600554600160a01b900460ff16156107815760405162461bcd60e51b81526004016105f3906123a3565b6000826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e791906123c5565b90506001600160a01b03811633148061080a57506000546001600160a01b031633145b6108265760405162461bcd60e51b81526004016105f390612384565b6001600160a01b03828116600090815260086020526040902054166108765760405162461bcd60e51b81526020600482015260066024820152652170726f787960d01b60448201526064016105f3565b6040805160048152602481019091526020810180516001600160e01b031663152aa42160e11b1790526108a98482611d38565b6000846001600160a01b031663d7c04a466040518163ffffffff1660e01b81526004016020604051808303816000875af11580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f91906123c5565b90507f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b6001600160a01b0316816001600160a01b031614156109fc57604080516001600160a01b03871660248083018290528351808403909101815260449092018352602080830180516001600160e01b03166373f982c160e11b17905283516335ed2f8960e21b815293519295506109f793919263d7b4be2492600480820193929182900301816000875af11580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f191906123c5565b83611d38565b610a6b565b6001600160a01b03818116600090815260086020526040908190205490516373f982c160e11b8152878316600482015291169063e7f3058290602401600060405180830381600087803b158015610a5257600080fd5b505af1158015610a66573d6000803e3d6000fd5b505050505b7f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b6001600160a01b0316846001600160a01b03161415610b2c57604080516001600160a01b03871660248083018290528351808403909101815260449092018352602080830180516001600160e01b03166373f982c160e11b17905283516335ed2f8960e21b81529351929550610b2793919263d7b4be2492600480820193929182900301816000875af11580156109cd573d6000803e3d6000fd5b610b9b565b6001600160a01b03848116600090815260086020526040908190205490516373f982c160e11b8152878316600482015291169063e7f3058290602401600060405180830381600087803b158015610b8257600080fd5b505af1158015610b96573d6000803e3d6000fd5b505050505b6040516001600160a01b03851660248201527f641a6cd0b01d626ff79f5bf07316ecb119eca316f9670e73b1e2c17c65b136749060440160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529150610c108583611d38565b6040805160048152602481019091526020810180516001600160e01b031663152aa42160e11b1790529150610c458583611d38565b5050505050565b6000546001600160a01b03163314610c765760405162461bcd60e51b81526004016105f390612384565b6001600160a01b0382811660008181526008602090815260409182902080546001600160a01b0319169486169485179055905192835290917fb91b1bd9de2775f6673be2dbf6acc1d0d524f3b2b4e547eaab3b770a6b8d617e910160405180910390a25050565b6004546001600160a01b03163314610d275760405162461bcd60e51b815260206004820152600d60248201526c21766f746544656c656761746560981b60448201526064016105f3565b60007f567813887e9a02f0fdc9e5cce34dad3f5e8ac785aa0259ba5d30339dd056cd238383610d57576000610d5a565b60015b604051602481019290925260ff16604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506106968482611d38565b6000546001600160a01b03163314610dd85760405162461bcd60e51b81526004016105f390612384565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f3ca93d0ab216ddc34a69d5e754afd4c484dc270149e769b81e9c4d244ce6a56a90600090a250565b6005546001600160a01b03161580610e4457506005546001600160a01b031633145b610e605760405162461bcd60e51b81526004016105f390612384565b6001600160a01b0380831660009081526007602090815260408083209385168352929052205460ff16610ec25760405162461bcd60e51b815260206004820152600a60248201526910b1b630b4b6a830b4b960b11b60448201526064016105f3565b6006546000906001600160a01b031615610f7e5760065460405163af688fed60e01b81526001600160a01b038581166004830152848116602483015291821660448201527f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b9091169063af688fed906064016020604051808303816000875af1158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7791906123e2565b905061101b565b60405163af688fed60e01b81526001600160a01b03848116600483015283811660248301523060448301527f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b169063af688fed906064016020604051808303816000875af1158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101891906123e2565b90505b6040518181527f83db9dc084973306ecd0b0f10cb495b81dd9ddcc135eb7934d2723bcabc8f4c39060200160405180910390a1505050565b6000546001600160a01b0316331461107d5760405162461bcd60e51b81526004016105f390612384565b60005b8381101561114f5760007fd7136328d183ca84da1077f1bb26d5301594537a6b326c5831b74e07229dc2898686848181106110bd576110bd6123fb565b90506020020160208101906110d2919061216a565b8585858181106110e4576110e46123fb565b6040516001600160a01b039094166024850152602002919091013560448301525060640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506111468782611d38565b50600101611080565b505050505050565b6000546001600160a01b031633146111815760405162461bcd60e51b81526004016105f390612384565b6005805460ff60a01b1916600160a01b1790556040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf890600090a1565b6000546001600160a01b031633146111e95760405162461bcd60e51b81526004016105f390612384565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166317066a5760e21b1790526112368382611d38565b600480546001600160a01b0319166001600160a01b0384169081179091556040517ffe3d977891d8a37d81321b525b70781640d7bca89d42a9ca844204831a87944390600090a2505050565b6000546001600160a01b031633146112ac5760405162461bcd60e51b81526004016105f390612384565b60408051602481018390526001600160a01b0384166044808301919091528251808303909101815260649091019091526020810180516001600160e01b03166317b0dca160e31b1790526113008482611d38565b6040516001600160a01b038416907f2bb25fbb42d8e727aa4821b933cc09877ef371e86860cb18c52f8fda3cf18b5c90600090a250505050565b6002546001600160a01b031633146113645760405162461bcd60e51b81526004016105f390612384565b604051631fea33c360e11b815281151560048201527f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a696001600160a01b031690633fd46786906024015b600060405180830381600087803b1580156113c857600080fd5b505af1158015610c45573d6000803e3d6000fd5b6005546001600160a01b031615806113fe57506005546001600160a01b031633145b61141a5760405162461bcd60e51b81526004016105f390612384565b604051635b61513760e01b81526001600160a01b0382811660048301527f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b1690635b615137906024016113ae565b6000546001600160a01b031633146114925760405162461bcd60e51b81526004016105f390612384565b600554600160a01b900460ff16156114bc5760405162461bcd60e51b81526004016105f3906123a3565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663ab18af2760e01b1790526115297f000000000000000000000000c9acb83ada68413a6aa57007bc720ee2e2b3c46d82611d38565b5050565b6000546001600160a01b031633146115575760405162461bcd60e51b81526004016105f390612384565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fe53395243914ebc025ce712146f66fa5e9d3f04b308fae19ac4123350d1cd20f90600090a250565b6000546001600160a01b031633146115cb5760405162461bcd60e51b81526004016105f390612384565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f557db96d9548e1dbd495296a46aba146ff5e2420be6460519688cbd366f1a427910160405180910390a3505050565b6001546001600160a01b03161580159061165c57506001546001600160a01b031633145b6116935760405162461bcd60e51b815260206004820152600860248201526710b82fb7bbb732b960c11b60448201526064016105f3565b60018054600080546001600160a01b0383166001600160a01b031991821681178355921690925560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a2565b60405163f2bc788b60e01b81526004810182905233602482015260009081908190819081906001600160a01b037f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a69169063f2bc788b906044016080604051808303816000875af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190612411565b604080516001600160a01b0386166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166373f982c160e11b179052939750919550935091506117d78482611d38565b604051637c643b2f60e11b81523360048201526001600160a01b0385811660248301528481166044830152838116606483015286169063f8c8765e90608401600060405180830381600087803b15801561183057600080fd5b505af1158015611844573d6000803e3d6000fd5b50506040516001600160a01b037f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b1660248201527f641a6cd0b01d626ff79f5bf07316ecb119eca316f9670e73b1e2c17c65b136749250604401905060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506118de8582611d38565b509295945050505050565b6002546001600160a01b031633146119135760405162461bcd60e51b81526004016105f390612384565b604051639abd9b0560e01b8152600481018290527f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a696001600160a01b031690639abd9b05906024016113ae565b6002546001600160a01b0316331461198a5760405162461bcd60e51b81526004016105f390612384565b604051637d2c770160e11b81526001600160a01b0382811660048301527f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a69169063fa58ee02906024016113ae565b6002546001600160a01b03163314611a025760405162461bcd60e51b81526004016105f390612384565b604051631574ca1360e31b81526001600160a01b038481166004830152838116602483015282811660448301527f00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a69169063aba6509890606401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611abc5760405162461bcd60e51b81526004016105f390612384565b611ad06001600160a01b0384168284611e19565b826001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2883604051611b0b91815260200190565b60405180910390a2505050565b6000546001600160a01b03163314611b425760405162461bcd60e51b81526004016105f390612384565b600580546001600160a01b0319166001600160a01b0383169081179091556040517f32af58d4c20240741a60b73ddef3d9160697f4d27297812b8583b298febc72ba90600090a250565b6000546001600160a01b03163314611bb65760405162461bcd60e51b81526004016105f390612384565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f5f4861af37461865f168c6e320428b3141f409a1763bd61b6359d38ad38ae74c90600090a250565b6000546001600160a01b03163314611c2a5760405162461bcd60e51b81526004016105f390612384565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fee58b2ec759bf63301361bbf3ae13e1923996d6493ef4e5825537b817443fbb390600090a250565b6000546001600160a01b03163314611c9e5760405162461bcd60e51b81526004016105f390612384565b604080516001600160a01b038316602482015260448082018590528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611cef8482611d38565b836001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2884604051611d2a91815260200190565b60405180910390a250505050565b604051635b0e93fb60e11b81526000906001600160a01b037f00000000000000000000000059cfcd384746ec3035299d90782be065e466800b169063b61d27f690611d8b908690859087906004016124c8565b6000604051808303816000875af1158015611daa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dd2919081019061250e565b50905080611e145760405162461bcd60e51b815260206004820152600f60248201526e141c9bde1e4810d85b1b0811985a5b608a1b60448201526064016105f3565b505050565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152611e1492869291600091611ea9918516908490611f26565b805190915015611e145780806020019051810190611ec791906125d1565b611e145760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f3565b6060611f358484600085611f3f565b90505b9392505050565b606082471015611fa05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105f3565b843b611fee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f3565b600080866001600160a01b0316858760405161200a91906125ee565b60006040518083038185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b509150915061205c828286612067565b979650505050505050565b60608315612076575081611f38565b8251156120865782518084602001fd5b8160405162461bcd60e51b81526004016105f3919061260a565b6000806000606084860312156120b557600080fd5b505081359360208301359350604090920135919050565b6001600160a01b038116811461075457600080fd5b600080604083850312156120f457600080fd5b82356120ff816120cc565b9150602083013561210f816120cc565b809150509250929050565b801515811461075457600080fd5b60008060006060848603121561213d57600080fd5b8335612148816120cc565b925060208401359150604084013561215f8161211a565b809150509250925092565b60006020828403121561217c57600080fd5b8135611f38816120cc565b60008083601f84011261219957600080fd5b50813567ffffffffffffffff8111156121b157600080fd5b6020830191508360208260051b85010111156121cc57600080fd5b9250929050565b6000806000806000606086880312156121eb57600080fd5b85356121f6816120cc565b9450602086013567ffffffffffffffff8082111561221357600080fd5b61221f89838a01612187565b9096509450604088013591508082111561223857600080fd5b5061224588828901612187565b969995985093965092949392505050565b60008060006060848603121561226b57600080fd5b8335612276816120cc565b92506020840135612286816120cc565b929592945050506040919091013590565b6000602082840312156122a957600080fd5b8135611f388161211a565b6000806000606084860312156122c957600080fd5b83356122d4816120cc565b925060208401356122e4816120cc565b9150604084013561215f8161211a565b60006020828403121561230657600080fd5b5035919050565b60008060006060848603121561232257600080fd5b833561232d816120cc565b9250602084013561233d816120cc565b9150604084013561215f816120cc565b60008060006060848603121561236257600080fd5b833561236d816120cc565b925060208401359150604084013561215f816120cc565b602080825260059082015264042c2eae8d60db1b604082015260600190565b60208082526008908201526739b43aba3237bbb760c11b604082015260600190565b6000602082840312156123d757600080fd5b8151611f38816120cc565b6000602082840312156123f457600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000806000806080858703121561242757600080fd5b8451612432816120cc565b6020860151909450612443816120cc565b6040860151909350612454816120cc565b6060860151909250612465816120cc565b939692955090935050565b60005b8381101561248b578181015183820152602001612473565b838111156106965750506000910152565b600081518084526124b4816020860160208601612470565b601f01601f19169290920160200192915050565b60018060a01b03841681528260208201526060604082015260006124ef606083018461249c565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561252157600080fd5b825161252c8161211a565b602084015190925067ffffffffffffffff8082111561254a57600080fd5b818501915085601f83011261255e57600080fd5b815181811115612570576125706124f8565b604051601f8201601f19908116603f01168101908382118183101715612598576125986124f8565b816040528281528860208487010111156125b157600080fd5b6125c2836020830160208801612470565b80955050505050509250929050565b6000602082840312156125e357600080fd5b8151611f388161211a565b60008251612600818460208701612470565b9190910192915050565b602081526000611f38602083018461249c56fea26469706673582212201e9175d22d78d5212cc05a15c3ef73c4915f9c67d5399deb2340e7aa3a88970864736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000059cfcd384746ec3035299d90782be065e466800b00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a69000000000000000000000000c9acb83ada68413a6aa57007bc720ee2e2b3c46d
-----Decoded View---------------
Arg [0] : _proxy (address): 0x59CFCD384746ec3035299D90782Be065e466800B
Arg [1] : _poolReg (address): 0x41a5881c17185383e19Df6FA4EC158a6F4851A69
Arg [2] : _feeReg (address): 0xC9aCB83ADa68413a6Aa57007BC720EE2E2b3C46D
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000059cfcd384746ec3035299d90782be065e466800b
Arg [1] : 00000000000000000000000041a5881c17185383e19df6fa4ec158a6f4851a69
Arg [2] : 000000000000000000000000c9acb83ada68413a6aa57007bc720ee2e2b3c46d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.