Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 466 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create New Fund | 15427681 | 964 days ago | IN | 0 ETH | 0.00020183 | ||||
Create New Fund | 12731704 | 1389 days ago | IN | 0 ETH | 0.00099244 | ||||
Create New Fund | 12386262 | 1442 days ago | IN | 0 ETH | 0.04812414 | ||||
Create New Fund | 12377036 | 1444 days ago | IN | 0 ETH | 0.06409185 | ||||
Create New Fund | 12376590 | 1444 days ago | IN | 0 ETH | 0.08157566 | ||||
Create New Fund | 12376196 | 1444 days ago | IN | 0 ETH | 0.06470139 | ||||
Create New Fund | 12372626 | 1444 days ago | IN | 0 ETH | 0.0223547 | ||||
Create New Fund | 12371711 | 1445 days ago | IN | 0 ETH | 0.04164687 | ||||
Create New Fund | 12370253 | 1445 days ago | IN | 0 ETH | 0.03953217 | ||||
Create New Fund | 12366355 | 1445 days ago | IN | 0 ETH | 0.01946639 | ||||
Create New Fund | 12363273 | 1446 days ago | IN | 0 ETH | 0.04647 | ||||
Create New Fund | 12359654 | 1446 days ago | IN | 0 ETH | 0.01965971 | ||||
Create New Fund | 12357906 | 1447 days ago | IN | 0 ETH | 0.03368288 | ||||
Create New Fund | 12355576 | 1447 days ago | IN | 0 ETH | 0.16918347 | ||||
Create New Fund | 12355319 | 1447 days ago | IN | 0 ETH | 0.04224968 | ||||
Create New Fund | 12354840 | 1447 days ago | IN | 0 ETH | 0.02148757 | ||||
Create New Fund | 12354816 | 1447 days ago | IN | 0 ETH | 0.03164182 | ||||
Create New Fund | 12354662 | 1447 days ago | IN | 0 ETH | 0.02184195 | ||||
Create New Fund | 12353952 | 1447 days ago | IN | 0 ETH | 0.02248789 | ||||
Create New Fund | 12353611 | 1447 days ago | IN | 0 ETH | 0.01399648 | ||||
Create New Fund | 12352390 | 1448 days ago | IN | 0 ETH | 0.02209883 | ||||
Create New Fund | 12349707 | 1448 days ago | IN | 0 ETH | 0.04383159 | ||||
Create New Fund | 12348638 | 1448 days ago | IN | 0 ETH | 0.02854905 | ||||
Create New Fund | 12348437 | 1448 days ago | IN | 0 ETH | 0.03076711 | ||||
Create New Fund | 12348412 | 1448 days ago | IN | 0 ETH | 0.0363276 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
FundDeployer
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; import "../../../persistent/dispatcher/IDispatcher.sol"; import "../../../persistent/utils/IMigrationHookHandler.sol"; import "../fund/comptroller/IComptroller.sol"; import "../fund/comptroller/ComptrollerProxy.sol"; import "../fund/vault/IVault.sol"; import "./IFundDeployer.sol"; /// @title FundDeployer Contract /// @author Enzyme Council <[email protected]> /// @notice The top-level contract of the release. /// It primarily coordinates fund deployment and fund migration, but /// it is also deferred to for contract access control and for allowed calls /// that can be made with a fund's VaultProxy as the msg.sender. contract FundDeployer is IFundDeployer, IMigrationHookHandler { event ComptrollerLibSet(address comptrollerLib); event ComptrollerProxyDeployed( address indexed creator, address comptrollerProxy, address indexed denominationAsset, uint256 sharesActionTimelock, bytes feeManagerConfigData, bytes policyManagerConfigData, bool indexed forMigration ); event NewFundCreated( address indexed creator, address comptrollerProxy, address vaultProxy, address indexed fundOwner, string fundName, address indexed denominationAsset, uint256 sharesActionTimelock, bytes feeManagerConfigData, bytes policyManagerConfigData ); event ReleaseStatusSet(ReleaseStatus indexed prevStatus, ReleaseStatus indexed nextStatus); event VaultCallDeregistered(address indexed contractAddress, bytes4 selector); event VaultCallRegistered(address indexed contractAddress, bytes4 selector); // Constants address private immutable CREATOR; address private immutable DISPATCHER; address private immutable VAULT_LIB; // Pseudo-constants (can only be set once) address private comptrollerLib; // Storage ReleaseStatus private releaseStatus; mapping(address => mapping(bytes4 => bool)) private contractToSelectorToIsRegisteredVaultCall; mapping(address => address) private pendingComptrollerProxyToCreator; modifier onlyLiveRelease() { require(releaseStatus == ReleaseStatus.Live, "Release is not Live"); _; } modifier onlyMigrator(address _vaultProxy) { require( IVault(_vaultProxy).canMigrate(msg.sender), "Only a permissioned migrator can call this function" ); _; } modifier onlyOwner() { require(msg.sender == getOwner(), "Only the contract owner can call this function"); _; } modifier onlyPendingComptrollerProxyCreator(address _comptrollerProxy) { require( msg.sender == pendingComptrollerProxyToCreator[_comptrollerProxy], "Only the ComptrollerProxy creator can call this function" ); _; } constructor( address _dispatcher, address _vaultLib, address[] memory _vaultCallContracts, bytes4[] memory _vaultCallSelectors ) public { if (_vaultCallContracts.length > 0) { __registerVaultCalls(_vaultCallContracts, _vaultCallSelectors); } CREATOR = msg.sender; DISPATCHER = _dispatcher; VAULT_LIB = _vaultLib; } ///////////// // GENERAL // ///////////// /// @notice Sets the comptrollerLib /// @param _comptrollerLib The ComptrollerLib contract address /// @dev Can only be set once function setComptrollerLib(address _comptrollerLib) external onlyOwner { require( comptrollerLib == address(0), "setComptrollerLib: This value can only be set once" ); comptrollerLib = _comptrollerLib; emit ComptrollerLibSet(_comptrollerLib); } /// @notice Sets the status of the protocol to a new state /// @param _nextStatus The next status state to set function setReleaseStatus(ReleaseStatus _nextStatus) external { require( msg.sender == IDispatcher(DISPATCHER).getOwner(), "setReleaseStatus: Only the Dispatcher owner can call this function" ); require( _nextStatus != ReleaseStatus.PreLaunch, "setReleaseStatus: Cannot return to PreLaunch status" ); require( comptrollerLib != address(0), "setReleaseStatus: Can only set the release status when comptrollerLib is set" ); ReleaseStatus prevStatus = releaseStatus; require(_nextStatus != prevStatus, "setReleaseStatus: _nextStatus is the current status"); releaseStatus = _nextStatus; emit ReleaseStatusSet(prevStatus, _nextStatus); } /// @notice Gets the current owner of the contract /// @return owner_ The contract owner address /// @dev Dynamically gets the owner based on the Protocol status. The owner is initially the /// contract's deployer, for convenience in setting up configuration. /// Ownership is claimed when the owner of the Dispatcher contract (the Enzyme Council) /// sets the releaseStatus to `Live`. function getOwner() public view override returns (address owner_) { if (releaseStatus == ReleaseStatus.PreLaunch) { return CREATOR; } return IDispatcher(DISPATCHER).getOwner(); } /////////////////// // FUND CREATION // /////////////////// /// @notice Creates a fully-configured ComptrollerProxy, to which a fund from a previous /// release can migrate in a subsequent step /// @param _denominationAsset The contract address of the denomination asset for the fund /// @param _sharesActionTimelock The minimum number of seconds between any two "shares actions" /// (buying or selling shares) by the same user /// @param _feeManagerConfigData Bytes data for the fees to be enabled for the fund /// @param _policyManagerConfigData Bytes data for the policies to be enabled for the fund /// @return comptrollerProxy_ The address of the ComptrollerProxy deployed during this action function createMigratedFundConfig( address _denominationAsset, uint256 _sharesActionTimelock, bytes calldata _feeManagerConfigData, bytes calldata _policyManagerConfigData ) external onlyLiveRelease returns (address comptrollerProxy_) { comptrollerProxy_ = __deployComptrollerProxy( _denominationAsset, _sharesActionTimelock, _feeManagerConfigData, _policyManagerConfigData, true ); pendingComptrollerProxyToCreator[comptrollerProxy_] = msg.sender; return comptrollerProxy_; } /// @notice Creates a new fund /// @param _fundOwner The address of the owner for the fund /// @param _fundName The name of the fund /// @param _denominationAsset The contract address of the denomination asset for the fund /// @param _sharesActionTimelock The minimum number of seconds between any two "shares actions" /// (buying or selling shares) by the same user /// @param _feeManagerConfigData Bytes data for the fees to be enabled for the fund /// @param _policyManagerConfigData Bytes data for the policies to be enabled for the fund /// @return comptrollerProxy_ The address of the ComptrollerProxy deployed during this action function createNewFund( address _fundOwner, string calldata _fundName, address _denominationAsset, uint256 _sharesActionTimelock, bytes calldata _feeManagerConfigData, bytes calldata _policyManagerConfigData ) external onlyLiveRelease returns (address comptrollerProxy_, address vaultProxy_) { return __createNewFund( _fundOwner, _fundName, _denominationAsset, _sharesActionTimelock, _feeManagerConfigData, _policyManagerConfigData ); } /// @dev Helper to avoid the stack-too-deep error during createNewFund function __createNewFund( address _fundOwner, string memory _fundName, address _denominationAsset, uint256 _sharesActionTimelock, bytes memory _feeManagerConfigData, bytes memory _policyManagerConfigData ) private returns (address comptrollerProxy_, address vaultProxy_) { require(_fundOwner != address(0), "__createNewFund: _owner cannot be empty"); comptrollerProxy_ = __deployComptrollerProxy( _denominationAsset, _sharesActionTimelock, _feeManagerConfigData, _policyManagerConfigData, false ); vaultProxy_ = IDispatcher(DISPATCHER).deployVaultProxy( VAULT_LIB, _fundOwner, comptrollerProxy_, _fundName ); IComptroller(comptrollerProxy_).activate(vaultProxy_, false); emit NewFundCreated( msg.sender, comptrollerProxy_, vaultProxy_, _fundOwner, _fundName, _denominationAsset, _sharesActionTimelock, _feeManagerConfigData, _policyManagerConfigData ); return (comptrollerProxy_, vaultProxy_); } /// @dev Helper function to deploy a configured ComptrollerProxy function __deployComptrollerProxy( address _denominationAsset, uint256 _sharesActionTimelock, bytes memory _feeManagerConfigData, bytes memory _policyManagerConfigData, bool _forMigration ) private returns (address comptrollerProxy_) { require( _denominationAsset != address(0), "__deployComptrollerProxy: _denominationAsset cannot be empty" ); bytes memory constructData = abi.encodeWithSelector( IComptroller.init.selector, _denominationAsset, _sharesActionTimelock ); comptrollerProxy_ = address(new ComptrollerProxy(constructData, comptrollerLib)); if (_feeManagerConfigData.length > 0 || _policyManagerConfigData.length > 0) { IComptroller(comptrollerProxy_).configureExtensions( _feeManagerConfigData, _policyManagerConfigData ); } emit ComptrollerProxyDeployed( msg.sender, comptrollerProxy_, _denominationAsset, _sharesActionTimelock, _feeManagerConfigData, _policyManagerConfigData, _forMigration ); return comptrollerProxy_; } ////////////////// // MIGRATION IN // ////////////////// /// @notice Cancels fund migration /// @param _vaultProxy The VaultProxy for which to cancel migration function cancelMigration(address _vaultProxy) external { __cancelMigration(_vaultProxy, false); } /// @notice Cancels fund migration, bypassing any failures. /// Should be used in an emergency only. /// @param _vaultProxy The VaultProxy for which to cancel migration function cancelMigrationEmergency(address _vaultProxy) external { __cancelMigration(_vaultProxy, true); } /// @notice Executes fund migration /// @param _vaultProxy The VaultProxy for which to execute the migration function executeMigration(address _vaultProxy) external { __executeMigration(_vaultProxy, false); } /// @notice Executes fund migration, bypassing any failures. /// Should be used in an emergency only. /// @param _vaultProxy The VaultProxy for which to execute the migration function executeMigrationEmergency(address _vaultProxy) external { __executeMigration(_vaultProxy, true); } /// @dev Unimplemented function invokeMigrationInCancelHook( address, address, address, address ) external virtual override { return; } /// @notice Signal a fund migration /// @param _vaultProxy The VaultProxy for which to signal the migration /// @param _comptrollerProxy The ComptrollerProxy for which to signal the migration function signalMigration(address _vaultProxy, address _comptrollerProxy) external { __signalMigration(_vaultProxy, _comptrollerProxy, false); } /// @notice Signal a fund migration, bypassing any failures. /// Should be used in an emergency only. /// @param _vaultProxy The VaultProxy for which to signal the migration /// @param _comptrollerProxy The ComptrollerProxy for which to signal the migration function signalMigrationEmergency(address _vaultProxy, address _comptrollerProxy) external { __signalMigration(_vaultProxy, _comptrollerProxy, true); } /// @dev Helper to cancel a migration function __cancelMigration(address _vaultProxy, bool _bypassFailure) private onlyLiveRelease onlyMigrator(_vaultProxy) { IDispatcher(DISPATCHER).cancelMigration(_vaultProxy, _bypassFailure); } /// @dev Helper to execute a migration function __executeMigration(address _vaultProxy, bool _bypassFailure) private onlyLiveRelease onlyMigrator(_vaultProxy) { IDispatcher dispatcherContract = IDispatcher(DISPATCHER); (, address comptrollerProxy, , ) = dispatcherContract .getMigrationRequestDetailsForVaultProxy(_vaultProxy); dispatcherContract.executeMigration(_vaultProxy, _bypassFailure); IComptroller(comptrollerProxy).activate(_vaultProxy, true); delete pendingComptrollerProxyToCreator[comptrollerProxy]; } /// @dev Helper to signal a migration function __signalMigration( address _vaultProxy, address _comptrollerProxy, bool _bypassFailure ) private onlyLiveRelease onlyPendingComptrollerProxyCreator(_comptrollerProxy) onlyMigrator(_vaultProxy) { IDispatcher(DISPATCHER).signalMigration( _vaultProxy, _comptrollerProxy, VAULT_LIB, _bypassFailure ); } /////////////////// // MIGRATION OUT // /////////////////// /// @notice Allows "hooking into" specific moments in the migration pipeline /// to execute arbitrary logic during a migration out of this release /// @param _vaultProxy The VaultProxy being migrated function invokeMigrationOutHook( MigrationOutHook _hook, address _vaultProxy, address, address, address ) external override { if (_hook != MigrationOutHook.PreMigrate) { return; } require( msg.sender == DISPATCHER, "postMigrateOriginHook: Only Dispatcher can call this function" ); // Must use PreMigrate hook to get the ComptrollerProxy from the VaultProxy address comptrollerProxy = IVault(_vaultProxy).getAccessor(); // Wind down fund and destroy its config IComptroller(comptrollerProxy).destruct(); } ////////////// // REGISTRY // ////////////// /// @notice De-registers allowed arbitrary contract calls that can be sent from the VaultProxy /// @param _contracts The contracts of the calls to de-register /// @param _selectors The selectors of the calls to de-register function deregisterVaultCalls(address[] calldata _contracts, bytes4[] calldata _selectors) external onlyOwner { require(_contracts.length > 0, "deregisterVaultCalls: Empty _contracts"); require( _contracts.length == _selectors.length, "deregisterVaultCalls: Uneven input arrays" ); for (uint256 i; i < _contracts.length; i++) { require( isRegisteredVaultCall(_contracts[i], _selectors[i]), "deregisterVaultCalls: Call not registered" ); contractToSelectorToIsRegisteredVaultCall[_contracts[i]][_selectors[i]] = false; emit VaultCallDeregistered(_contracts[i], _selectors[i]); } } /// @notice Registers allowed arbitrary contract calls that can be sent from the VaultProxy /// @param _contracts The contracts of the calls to register /// @param _selectors The selectors of the calls to register function registerVaultCalls(address[] calldata _contracts, bytes4[] calldata _selectors) external onlyOwner { require(_contracts.length > 0, "registerVaultCalls: Empty _contracts"); __registerVaultCalls(_contracts, _selectors); } /// @dev Helper to register allowed vault calls function __registerVaultCalls(address[] memory _contracts, bytes4[] memory _selectors) private { require( _contracts.length == _selectors.length, "__registerVaultCalls: Uneven input arrays" ); for (uint256 i; i < _contracts.length; i++) { require( !isRegisteredVaultCall(_contracts[i], _selectors[i]), "__registerVaultCalls: Call already registered" ); contractToSelectorToIsRegisteredVaultCall[_contracts[i]][_selectors[i]] = true; emit VaultCallRegistered(_contracts[i], _selectors[i]); } } /////////////////// // STATE GETTERS // /////////////////// /// @notice Gets the `comptrollerLib` variable value /// @return comptrollerLib_ The `comptrollerLib` variable value function getComptrollerLib() external view returns (address comptrollerLib_) { return comptrollerLib; } /// @notice Gets the `CREATOR` variable value /// @return creator_ The `CREATOR` variable value function getCreator() external view returns (address creator_) { return CREATOR; } /// @notice Gets the `DISPATCHER` variable value /// @return dispatcher_ The `DISPATCHER` variable value function getDispatcher() external view returns (address dispatcher_) { return DISPATCHER; } /// @notice Gets the creator of a pending ComptrollerProxy /// @return pendingComptrollerProxyCreator_ The pending ComptrollerProxy creator function getPendingComptrollerProxyCreator(address _comptrollerProxy) external view returns (address pendingComptrollerProxyCreator_) { return pendingComptrollerProxyToCreator[_comptrollerProxy]; } /// @notice Gets the `releaseStatus` variable value /// @return status_ The `releaseStatus` variable value function getReleaseStatus() external view override returns (ReleaseStatus status_) { return releaseStatus; } /// @notice Gets the `VAULT_LIB` variable value /// @return vaultLib_ The `VAULT_LIB` variable value function getVaultLib() external view returns (address vaultLib_) { return VAULT_LIB; } /// @notice Checks if a contract call is registered /// @param _contract The contract of the call to check /// @param _selector The selector of the call to check /// @return isRegistered_ True if the call is registered function isRegisteredVaultCall(address _contract, bytes4 _selector) public view override returns (bool isRegistered_) { return contractToSelectorToIsRegisteredVaultCall[_contract][_selector]; } }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IDispatcher Interface /// @author Enzyme Council <[email protected]> interface IDispatcher { function cancelMigration(address _vaultProxy, bool _bypassFailure) external; function claimOwnership() external; function deployVaultProxy( address _vaultLib, address _owner, address _vaultAccessor, string calldata _fundName ) external returns (address vaultProxy_); function executeMigration(address _vaultProxy, bool _bypassFailure) external; function getCurrentFundDeployer() external view returns (address currentFundDeployer_); function getFundDeployerForVaultProxy(address _vaultProxy) external view returns (address fundDeployer_); function getMigrationRequestDetailsForVaultProxy(address _vaultProxy) external view returns ( address nextFundDeployer_, address nextVaultAccessor_, address nextVaultLib_, uint256 executableTimestamp_ ); function getMigrationTimelock() external view returns (uint256 migrationTimelock_); function getNominatedOwner() external view returns (address nominatedOwner_); function getOwner() external view returns (address owner_); function getSharesTokenSymbol() external view returns (string memory sharesTokenSymbol_); function getTimelockRemainingForMigrationRequest(address _vaultProxy) external view returns (uint256 secondsRemaining_); function hasExecutableMigrationRequest(address _vaultProxy) external view returns (bool hasExecutableRequest_); function hasMigrationRequest(address _vaultProxy) external view returns (bool hasMigrationRequest_); function removeNominatedOwner() external; function setCurrentFundDeployer(address _nextFundDeployer) external; function setMigrationTimelock(uint256 _nextTimelock) external; function setNominatedOwner(address _nextNominatedOwner) external; function setSharesTokenSymbol(string calldata _nextSymbol) external; function signalMigration( address _vaultProxy, address _nextVaultAccessor, address _nextVaultLib, bool _bypassFailure ) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IMigratableVault Interface /// @author Enzyme Council <[email protected]> /// @dev DO NOT EDIT CONTRACT interface IMigratableVault { function canMigrate(address _who) external view returns (bool canMigrate_); function init( address _owner, address _accessor, string calldata _fundName ) external; function setAccessor(address _nextAccessor) external; function setVaultLib(address _nextVaultLib) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IMigrationHookHandler Interface /// @author Enzyme Council <[email protected]> interface IMigrationHookHandler { enum MigrationOutHook {PreSignal, PostSignal, PreMigrate, PostMigrate, PostCancel} function invokeMigrationInCancelHook( address _vaultProxy, address _prevFundDeployer, address _nextVaultAccessor, address _nextVaultLib ) external; function invokeMigrationOutHook( MigrationOutHook _hook, address _vaultProxy, address _nextFundDeployer, address _nextVaultAccessor, address _nextVaultLib ) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IFundDeployer Interface /// @author Enzyme Council <[email protected]> interface IFundDeployer { enum ReleaseStatus {PreLaunch, Live, Paused} function getOwner() external view returns (address); function getReleaseStatus() external view returns (ReleaseStatus); function isRegisteredVaultCall(address, bytes4) external view returns (bool); }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "../../../utils/Proxy.sol"; /// @title ComptrollerProxy Contract /// @author Enzyme Council <[email protected]> /// @notice A proxy contract for all ComptrollerProxy instances contract ComptrollerProxy is Proxy { constructor(bytes memory _constructData, address _comptrollerLib) public Proxy(_constructData, _comptrollerLib) {} }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IComptroller Interface /// @author Enzyme Council <[email protected]> interface IComptroller { enum VaultAction { None, BurnShares, MintShares, TransferShares, ApproveAssetSpender, WithdrawAssetTo, AddTrackedAsset, RemoveTrackedAsset } function activate(address, bool) external; function calcGav(bool) external returns (uint256, bool); function calcGrossShareValue(bool) external returns (uint256, bool); function callOnExtension( address, uint256, bytes calldata ) external; function configureExtensions(bytes calldata, bytes calldata) external; function destruct() external; function getDenominationAsset() external view returns (address); function getVaultProxy() external view returns (address); function init(address, uint256) external; function permissionedVaultAction(VaultAction, bytes calldata) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "../../../../persistent/utils/IMigratableVault.sol"; /// @title IVault Interface /// @author Enzyme Council <[email protected]> interface IVault is IMigratableVault { function addTrackedAsset(address) external; function approveAssetSpender( address, address, uint256 ) external; function burnShares(address, uint256) external; function callOnContract(address, bytes calldata) external; function getAccessor() external view returns (address); function getOwner() external view returns (address); function getTrackedAssets() external view returns (address[] memory); function isTrackedAsset(address) external view returns (bool); function mintShares(address, uint256) external; function removeTrackedAsset(address) external; function transferShares( address, address, uint256 ) external; function withdrawAssetTo( address, address, uint256 ) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title Proxy Contract /// @author Enzyme Council <[email protected]> /// @notice A proxy contract for all Proxy instances /// @dev The recommended implementation of a Proxy in EIP-1822, updated for solc 0.6.12, /// and using the EIP-1967 storage slot for the proxiable implementation. /// i.e., `bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)`, which is /// "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" /// See: https://eips.ethereum.org/EIPS/eip-1822 contract Proxy { constructor(bytes memory _constructData, address _contractLogic) public { assembly { sstore( 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, _contractLogic ) } (bool success, bytes memory returnData) = _contractLogic.delegatecall(_constructData); require(success, string(returnData)); } fallback() external payable { assembly { let contractLogic := sload( 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc ) calldatacopy(0x0, 0x0, calldatasize()) let success := delegatecall( sub(gas(), 10000), contractLogic, 0x0, calldatasize(), 0, 0 ) let retSz := returndatasize() returndatacopy(0, 0, retSz) switch success case 0 { revert(0, retSz) } default { return(0, retSz) } } } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "details": { "constantOptimizer": true, "cse": true, "deduplicate": true, "jumpdestRemover": true, "orderLiterals": true, "peephole": true, "yul": false }, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_dispatcher","type":"address"},{"internalType":"address","name":"_vaultLib","type":"address"},{"internalType":"address[]","name":"_vaultCallContracts","type":"address[]"},{"internalType":"bytes4[]","name":"_vaultCallSelectors","type":"bytes4[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"comptrollerLib","type":"address"}],"name":"ComptrollerLibSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":true,"internalType":"address","name":"denominationAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesActionTimelock","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"feeManagerConfigData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"policyManagerConfigData","type":"bytes"},{"indexed":true,"internalType":"bool","name":"forMigration","type":"bool"}],"name":"ComptrollerProxyDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":false,"internalType":"address","name":"vaultProxy","type":"address"},{"indexed":true,"internalType":"address","name":"fundOwner","type":"address"},{"indexed":false,"internalType":"string","name":"fundName","type":"string"},{"indexed":true,"internalType":"address","name":"denominationAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesActionTimelock","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"feeManagerConfigData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"policyManagerConfigData","type":"bytes"}],"name":"NewFundCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IFundDeployer.ReleaseStatus","name":"prevStatus","type":"uint8"},{"indexed":true,"internalType":"enum IFundDeployer.ReleaseStatus","name":"nextStatus","type":"uint8"}],"name":"ReleaseStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"VaultCallDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"VaultCallRegistered","type":"event"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"cancelMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"cancelMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_denominationAsset","type":"address"},{"internalType":"uint256","name":"_sharesActionTimelock","type":"uint256"},{"internalType":"bytes","name":"_feeManagerConfigData","type":"bytes"},{"internalType":"bytes","name":"_policyManagerConfigData","type":"bytes"}],"name":"createMigratedFundConfig","outputs":[{"internalType":"address","name":"comptrollerProxy_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundOwner","type":"address"},{"internalType":"string","name":"_fundName","type":"string"},{"internalType":"address","name":"_denominationAsset","type":"address"},{"internalType":"uint256","name":"_sharesActionTimelock","type":"uint256"},{"internalType":"bytes","name":"_feeManagerConfigData","type":"bytes"},{"internalType":"bytes","name":"_policyManagerConfigData","type":"bytes"}],"name":"createNewFund","outputs":[{"internalType":"address","name":"comptrollerProxy_","type":"address"},{"internalType":"address","name":"vaultProxy_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"deregisterVaultCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"executeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"executeMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getComptrollerLib","outputs":[{"internalType":"address","name":"comptrollerLib_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreator","outputs":[{"internalType":"address","name":"creator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDispatcher","outputs":[{"internalType":"address","name":"dispatcher_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"getPendingComptrollerProxyCreator","outputs":[{"internalType":"address","name":"pendingComptrollerProxyCreator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReleaseStatus","outputs":[{"internalType":"enum IFundDeployer.ReleaseStatus","name":"status_","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultLib","outputs":[{"internalType":"address","name":"vaultLib_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"invokeMigrationInCancelHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IMigrationHookHandler.MigrationOutHook","name":"_hook","type":"uint8"},{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"invokeMigrationOutHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"isRegisteredVaultCall","outputs":[{"internalType":"bool","name":"isRegistered_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"registerVaultCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerLib","type":"address"}],"name":"setComptrollerLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IFundDeployer.ReleaseStatus","name":"_nextStatus","type":"uint8"}],"name":"setReleaseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"signalMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"signalMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620032743803806200327483398101604081905262000034916200035a565b81511562000048576200004882826200006f565b505033606090811b6080526001600160601b031992811b831660a0521b1660c05262000573565b80518251146200009c5760405162461bcd60e51b81526004016200009390620004c5565b60405180910390fd5b60005b82518110156200020157620000e3838281518110620000ba57fe5b6020026020010151838381518110620000cf57fe5b60200260200101516200020660201b60201c565b15620001035760405162461bcd60e51b81526004016200009390620004b3565b60018060008584815181106200011557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200014c57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106200019a57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620001d957fe5b6020026020010151604051620001f09190620004a3565b60405180910390a26001016200009f565b505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b805162000238816200054e565b600082601f8301126200025d57600080fd5b8151620002746200026e82620004fe565b620004d7565b915081818352602084019350602081019050838560208402820111156200029a57600080fd5b60005b83811015620002ca5781620002b388826200023e565b84525060209283019291909101906001016200029d565b5050505092915050565b600082601f830112620002e657600080fd5b8151620002f76200026e82620004fe565b915081818352602084019350602081019050838560208402820111156200031d57600080fd5b60005b83811015620002ca57816200033688826200034d565b845250602092830192919091019060010162000320565b8051620002388162000568565b600080600080608085870312156200037157600080fd5b60006200037f87876200023e565b945050602062000392878288016200023e565b93505060408501516001600160401b03811115620003af57600080fd5b620003bd878288016200024b565b92505060608501516001600160401b03811115620003da57600080fd5b620003e887828801620002d4565b91505092959194509250565b620003ff8162000535565b82525050565b600062000414602d836200051f565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b6000620004656029836200051f565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60208101620002388284620003f4565b60208082528101620002388162000405565b60208082528101620002388162000456565b6040518181016001600160401b0381118282101715620004f657600080fd5b604052919050565b60006001600160401b038211156200051557600080fd5b5060209081020190565b90815260200190565b6000620002388262000542565b6001600160e01b03191690565b6001600160a01b031690565b620005598162000528565b81146200056557600080fd5b50565b620005598162000535565b60805160601c60a05160601c60c05160601c612c99620005db60003980610995528061152b528061179d525080610672528061086d5280610a1e5280610d1a5280610f2752806111ae52806114f9528061176f52508061042552806109f75250612c996000f3fe60806040523480156200001157600080fd5b5060043610620001605760003560e01c80639eb2c7b211620000c9578063d2456de11162000087578063d2456de114620002bd578063da29fcfe14620002d4578063dc77205314620002eb578063df369ba71462000311578063ebb3d5891462000328578063f0bb66ac14620003325762000160565b80639eb2c7b21462000248578063a08d967d146200025f578063a5fede1d1462000276578063c108b47d146200028f578063c166f9ea14620002a65762000160565b806351dfdb48116200012357806351dfdb4814620001e5578063682cea1914620001fc5780636f022ac4146200020657806378ed2293146200021d578063893d20e8146200023457806393a2ecd9146200023e5762000160565b80630d2fcd7614620001655780630ee2cb10146200017e5780630fe6972b14620001a057806328eb9ca514620001b75780633f84c12c14620001ce575b600080fd5b6200017c62000176366004620019fd565b62000359565b005b6200018862000423565b604051620001979190620024ee565b60405180910390f35b6200017c620001b136600462001d14565b62000448565b6200017c620001c836600462001e4d565b62000670565b6200017c620001df36600462001dcd565b62000847565b6200017c620001f6366004620019fd565b62000983565b6200018862000993565b6200017c62000217366004620019fd565b620009b7565b6200017c6200022e366004620019fd565b620009c4565b62000188620009d1565b6200018862000ab6565b6200017c62000259366004620019fd565b62000ac5565b6200018862000270366004620019fd565b62000ad2565b6200028062000af3565b6040516200019791906200272b565b62000188620002a036600462001c70565b62000b03565b6200017c620002b736600462001a47565b62000bee565b6200017c620002ce36600462001a47565b62000c00565b6200017c620002e536600462001d14565b62000c0e565b62000302620002fc36600462001b4e565b62000ce0565b604051620001979190620026be565b6200017c6200032236600462001a86565b62000cda565b6200018862000d18565b620003496200034336600462001b83565b62000d3c565b604051620001979291906200250e565b62000363620009d1565b6001600160a01b0316336001600160a01b0316146200039f5760405162461bcd60e51b81526004016200039690620027a7565b60405180910390fd5b6000546001600160a01b031615620003cb5760405162461bcd60e51b815260040162000396906200273b565b600080546001600160a01b0319166001600160a01b0383161790556040517f38e37d5fdf60e4358769c3b616594ad451626b1e023c65eaa1062116feadacf89062000418908390620024ee565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000005b90565b62000452620009d1565b6001600160a01b0316336001600160a01b031614620004855760405162461bcd60e51b81526004016200039690620027a7565b82620004a55760405162461bcd60e51b8152600401620003969062002825565b828114620004c75760405162461bcd60e51b815260040162000396906200285b565b60005b8381101562000669576200051f858583818110620004e457fe5b9050602002016020810190620004fb9190620019fd565b8484848181106200050857fe5b9050602002016020810190620002fc919062001dac565b6200053e5760405162461bcd60e51b81526004016200039690620027b9565b6000600160008787858181106200055157fe5b9050602002016020810190620005689190620019fd565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585858181106200059757fe5b9050602002016020810190620005ae919062001dac565b6001600160e01b03191681526020810191909152604001600020805460ff1916911515919091179055848482818110620005e457fe5b9050602002016020810190620005fb9190620019fd565b6001600160a01b03167f04a77425d9eba3b1260e976806c0cdefae7f41bb1106222790dd45e863ceaf978484848181106200063257fe5b905060200201602081019062000649919062001dac565b604051620006589190620026ce565b60405180910390a2600101620004ca565b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ca57600080fd5b505afa158015620006df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000705919062001a26565b6001600160a01b0316336001600160a01b031614620007385760405162461bcd60e51b8152600401620003969062002837565b60008160028111156200074757fe5b1415620007685760405162461bcd60e51b815260040162000396906200286d565b6000546001600160a01b0316620007935760405162461bcd60e51b8152600401620003969062002795565b600054600160a01b900460ff16806002811115620007ad57fe5b826002811115620007ba57fe5b1415620007db5760405162461bcd60e51b8152600401620003969062002849565b6000805483919060ff60a01b1916600160a01b836002811115620007fb57fe5b02179055508160028111156200080d57fe5b8160028111156200081a57fe5b6040517ffaab041807e925180f5d7036a295923ff66f30f9d7957c96b898d16b0e90b7d890600090a35050565b60028560048111156200085657fe5b14620008625762000669565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620008ad5760405162461bcd60e51b81526004016200039690620027dd565b6000846001600160a01b0316635a53e3486040518163ffffffff1660e01b815260040160206040518083038186803b158015620008e957600080fd5b505afa158015620008fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000924919062001a26565b9050806001600160a01b0316632b68b9c66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200096257600080fd5b505af115801562000977573d6000803e3d6000fd5b50505050505050505050565b6200099081600062000e3a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b62000990816000620010b9565b6200099081600162000e3a565b600080600054600160a01b900460ff166002811115620009ed57fe5b141562000a1c57507f000000000000000000000000000000000000000000000000000000000000000062000445565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a7657600080fd5b505afa15801562000a8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab1919062001a26565b905090565b6000546001600160a01b031690565b62000990816001620010b9565b6001600160a01b03808216600090815260026020526040902054165b919050565b600054600160a01b900460ff1690565b60006001600054600160a01b900460ff16600281111562000b2057fe5b1462000b405760405162461bcd60e51b815260040162000396906200275f565b62000bba878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506001925062001220915050565b6001600160a01b038116600090815260026020526040902080546001600160a01b0319163317905590509695505050505050565b62000bfc82826001620013c6565b5050565b62000bfc82826000620013c6565b62000c18620009d1565b6001600160a01b0316336001600160a01b03161462000c4b5760405162461bcd60e51b81526004016200039690620027a7565b8262000c6b5760405162461bcd60e51b8152600401620003969062002813565b62000cda848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506200159192505050565b50505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000806001600054600160a01b900460ff16600281111562000d5a57fe5b1462000d7a5760405162461bcd60e51b815260040162000396906200275f565b62000e288b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506200171992505050565b91509150995099975050505050505050565b6001600054600160a01b900460ff16600281111562000e5557fe5b1462000e755760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062000ea5903390600401620024fe565b60206040518083038186803b15801562000ebe57600080fd5b505afa15801562000ed3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef9919062001d8b565b62000f185760405162461bcd60e51b81526004016200039690620027cb565b604051630fb5b3f960e31b81527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b03831690637dad9fc89062000f6b908890600401620024ee565b60806040518083038186803b15801562000f8457600080fd5b505afa15801562000f99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fbf919062001af0565b50506040516338b3eb1b60e01b81529092506001600160a01b03841691506338b3eb1b9062000ff5908890889060040162002637565b600060405180830381600087803b1580156200101057600080fd5b505af115801562001025573d6000803e3d6000fd5b50506040516382d3a1dd60e01b81526001600160a01b03841692506382d3a1dd91506200105a90889060019060040162002637565b600060405180830381600087803b1580156200107557600080fd5b505af11580156200108a573d6000803e3d6000fd5b505050506001600160a01b0316600090815260026020526040902080546001600160a01b031916905550505050565b6001600054600160a01b900460ff166002811115620010d457fe5b14620010f45760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062001124903390600401620024fe565b60206040518083038186803b1580156200113d57600080fd5b505afa15801562001152573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001178919062001d8b565b620011975760405162461bcd60e51b81526004016200039690620027cb565b604051634e4ea46d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639c9d48da90620011e7908690869060040162002637565b600060405180830381600087803b1580156200120257600080fd5b505af115801562001217573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0386166200124b5760405162461bcd60e51b81526004016200039690620027ef565b606063399ae72460e01b87876040516024016200126a92919062002656565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600054915190925082916001600160a01b031690620012bb90620018f6565b620012c8929190620026de565b604051809103906000f080158015620012e5573d6000803e3d6000fd5b509150600085511180620012fa575060008451115b1562001365576040516396aed58760e01b81526001600160a01b038316906396aed5879062001330908890889060040162002702565b600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b505050505b821515876001600160a01b0316336001600160a01b03167f0e6310be2c106224ea5db41e7f599982b85c8524b0e7cd0c4fb88e2ac46554b5858a8a8a604051620013b3949392919062002675565b60405180910390a4505b95945050505050565b6001600054600160a01b900460ff166002811115620013e157fe5b14620014015760405162461bcd60e51b815260040162000396906200275f565b6001600160a01b0382811660009081526002602052604090205483911633146200143f5760405162461bcd60e51b8152600401620003969062002783565b604051633ef03e7560e11b815284906001600160a01b03821690637de07cea906200146f903390600401620024fe565b60206040518083038186803b1580156200148857600080fd5b505afa1580156200149d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014c3919062001d8b565b620014e25760405162461bcd60e51b81526004016200039690620027cb565b604051633457e6e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d15f9b9c906200155690889088907f000000000000000000000000000000000000000000000000000000000000000090899060040162002534565b600060405180830381600087803b1580156200157157600080fd5b505af115801562001586573d6000803e3d6000fd5b505050505050505050565b8051825114620015b55760405162461bcd60e51b8152600401620003969062002801565b60005b82518110156200171457620015f6838281518110620015d357fe5b6020026020010151838381518110620015e857fe5b602002602001015162000ce0565b15620016165760405162461bcd60e51b8152600401620003969062002771565b60018060008584815181106200162857fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200165f57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110620016ad57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620016ec57fe5b6020026020010151604051620017039190620026ce565b60405180910390a2600101620015b8565b505050565b6000806001600160a01b038816620017455760405162461bcd60e51b815260040162000396906200274d565b6200175586868686600062001220565b6040516322a0c08b60e01b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322a0c08b90620017cc907f0000000000000000000000000000000000000000000000000000000000000000908c9087908d9060040162002571565b602060405180830381600087803b158015620017e757600080fd5b505af1158015620017fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001822919062001a26565b6040516382d3a1dd60e01b81529091506001600160a01b038316906382d3a1dd906200185690849060009060040162002637565b600060405180830381600087803b1580156200187157600080fd5b505af115801562001886573d6000803e3d6000fd5b50505050856001600160a01b0316886001600160a01b0316336001600160a01b03167f38d3196918721ec4627522d424d47f608e3f0f7e7a8f8abe5369150f7fc4b2a585858c8b8b8b604051620018e396959493929190620025bd565b60405180910390a4965096945050505050565b6102e1806200298383390190565b803562000d12816200292e565b805162000d12816200292e565b60008083601f8401126200193157600080fd5b50813567ffffffffffffffff8111156200194a57600080fd5b6020830191508360208202830111156200196357600080fd5b9250929050565b805162000d128162002945565b803562000d128162002950565b60008083601f8401126200199757600080fd5b50813567ffffffffffffffff811115620019b057600080fd5b6020830191508360018202830111156200196357600080fd5b803562000d12816200295b565b803562000d128162002969565b803562000d128162002977565b805162000d128162002977565b60006020828403121562001a1057600080fd5b600062001a1e848462001904565b949350505050565b60006020828403121562001a3957600080fd5b600062001a1e848462001911565b6000806040838503121562001a5b57600080fd5b600062001a69858562001904565b925050602062001a7c8582860162001904565b9150509250929050565b6000806000806080858703121562001a9d57600080fd5b600062001aab878762001904565b945050602062001abe8782880162001904565b935050604062001ad18782880162001904565b925050606062001ae48782880162001904565b91505092959194509250565b6000806000806080858703121562001b0757600080fd5b600062001b15878762001911565b945050602062001b288782880162001911565b935050604062001b3b8782880162001911565b925050606062001ae487828801620019f0565b6000806040838503121562001b6257600080fd5b600062001b70858562001904565b925050602062001a7c8582860162001977565b600080600080600080600080600060c08a8c03121562001ba257600080fd5b600062001bb08c8c62001904565b99505060208a013567ffffffffffffffff81111562001bce57600080fd5b62001bdc8c828d0162001984565b9850985050604062001bf18c828d0162001904565b965050606062001c048c828d01620019e3565b95505060808a013567ffffffffffffffff81111562001c2257600080fd5b62001c308c828d0162001984565b945094505060a08a013567ffffffffffffffff81111562001c5057600080fd5b62001c5e8c828d0162001984565b92509250509295985092959850929598565b6000806000806000806080878903121562001c8a57600080fd5b600062001c98898962001904565b965050602062001cab89828a01620019e3565b955050604087013567ffffffffffffffff81111562001cc957600080fd5b62001cd789828a0162001984565b9450945050606087013567ffffffffffffffff81111562001cf757600080fd5b62001d0589828a0162001984565b92509250509295509295509295565b6000806000806040858703121562001d2b57600080fd5b843567ffffffffffffffff81111562001d4357600080fd5b62001d51878288016200191e565b9450945050602085013567ffffffffffffffff81111562001d7157600080fd5b62001d7f878288016200191e565b95989497509550505050565b60006020828403121562001d9e57600080fd5b600062001a1e84846200196a565b60006020828403121562001dbf57600080fd5b600062001a1e848462001977565b600080600080600060a0868803121562001de657600080fd5b600062001df48888620019c9565b955050602062001e078882890162001904565b945050604062001e1a8882890162001904565b935050606062001e2d8882890162001904565b925050608062001e408882890162001904565b9150509295509295909350565b60006020828403121562001e6057600080fd5b600062001a1e8484620019d6565b62001e7981620028c3565b82525050565b62001e79816200288c565b62001e798162002899565b62001e79816200289e565b600062001ead826200287f565b62001eb9818562002883565b935062001ecb818560208601620028ea565b62001ed68162002919565b9093019392505050565b62001e7981620028d0565b600062001efa60328362002883565b7f736574436f6d7074726f6c6c65724c69623a20546869732076616c75652063618152716e206f6e6c7920626520736574206f6e636560701b602082015260400192915050565b600062001f5060278362002883565b7f5f5f6372656174654e657746756e643a205f6f776e65722063616e6e6f7420628152666520656d70747960c81b602082015260400192915050565b600062001f9b60138362002883565b7252656c65617365206973206e6f74204c69766560681b815260200192915050565b600062001fcc602d8362002883565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b60006200201d60388362002883565b7f4f6e6c792074686520436f6d7074726f6c6c657250726f78792063726561746f81527f722063616e2063616c6c20746869732066756e6374696f6e0000000000000000602082015260400192915050565b60006200207e604c8362002883565b7f73657452656c656173655374617475733a2043616e206f6e6c7920736574207481527f68652072656c6561736520737461747573207768656e20636f6d7074726f6c6c60208201526b195c931a58881a5cc81cd95d60a21b604082015260600192915050565b6000620020f4602e8362002883565b7f4f6e6c792074686520636f6e7472616374206f776e65722063616e2063616c6c81526d103a3434b990333ab731ba34b7b760911b602082015260400192915050565b60006200214660298362002883565b7f646572656769737465725661756c7443616c6c733a2043616c6c206e6f7420728152681959da5cdd195c995960ba1b602082015260400192915050565b60006200219360338362002883565b7f4f6e6c792061207065726d697373696f6e6564206d69677261746f722063616e8152721031b0b636103a3434b990333ab731ba34b7b760691b602082015260400192915050565b6000620021ea603d8362002883565b7f706f73744d6967726174654f726967696e486f6f6b3a204f6e6c79204469737081527f6174636865722063616e2063616c6c20746869732066756e6374696f6e000000602082015260400192915050565b60006200224b603c8362002883565b7f5f5f6465706c6f79436f6d7074726f6c6c657250726f78793a205f64656e6f6d81527f696e6174696f6e41737365742063616e6e6f7420626520656d70747900000000602082015260400192915050565b6000620022ac60298362002883565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b6000620022f960248362002883565b7f72656769737465725661756c7443616c6c733a20456d707479205f636f6e74728152636163747360e01b602082015260400192915050565b60006200234160268362002883565b7f646572656769737465725661756c7443616c6c733a20456d707479205f636f6e81526574726163747360d01b602082015260400192915050565b60006200238b60428362002883565b7f73657452656c656173655374617475733a204f6e6c792074686520446973706181527f7463686572206f776e65722063616e2063616c6c20746869732066756e63746960208201526137b760f11b604082015260600192915050565b6000620023f760338362002883565b7f73657452656c656173655374617475733a205f6e657874537461747573206973815272207468652063757272656e742073746174757360681b602082015260400192915050565b60006200244e60298362002883565b7f646572656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60006200249b60338362002883565b7f73657452656c656173655374617475733a2043616e6e6f742072657475726e20815272746f205072654c61756e63682073746174757360681b602082015260400192915050565b62001e798162000445565b6020810162000d12828462001e7f565b6020810162000d12828462001e6e565b604081016200251e828562001e7f565b6200252d602083018462001e7f565b9392505050565b6080810162002544828762001e7f565b62002553602083018662001e7f565b62002562604083018562001e7f565b620013bd606083018462001e8a565b6080810162002581828762001e7f565b62002590602083018662001e7f565b6200259f604083018562001e7f565b8181036060830152620025b3818462001ea0565b9695505050505050565b60c08101620025cd828962001e7f565b620025dc602083018862001e7f565b8181036040830152620025f0818762001ea0565b9050620026016060830186620024e3565b818103608083015262002615818562001ea0565b905081810360a08301526200262b818462001ea0565b98975050505050505050565b6040810162002647828562001e7f565b6200252d602083018462001e8a565b6040810162002666828562001e7f565b6200252d6020830184620024e3565b6080810162002685828762001e7f565b620026946020830186620024e3565b8181036040830152620026a8818562001ea0565b90508181036060830152620025b3818462001ea0565b6020810162000d12828462001e8a565b6020810162000d12828462001e95565b60408082528101620026f1818562001ea0565b90506200252d602083018462001e7f565b6040808252810162002715818562001ea0565b9050818103602083015262001a1e818462001ea0565b6020810162000d12828462001ee0565b6020808252810162000d128162001eeb565b6020808252810162000d128162001f41565b6020808252810162000d128162001f8c565b6020808252810162000d128162001fbd565b6020808252810162000d12816200200e565b6020808252810162000d12816200206f565b6020808252810162000d1281620020e5565b6020808252810162000d128162002137565b6020808252810162000d128162002184565b6020808252810162000d1281620021db565b6020808252810162000d12816200223c565b6020808252810162000d12816200229d565b6020808252810162000d1281620022ea565b6020808252810162000d128162002332565b6020808252810162000d12816200237c565b6020808252810162000d1281620023e8565b6020808252810162000d12816200243f565b6020808252810162000d12816200248c565b5190565b90815260200190565b600062000d1282620028b7565b151590565b6001600160e01b03191690565b8062000aee8162002923565b6001600160a01b031690565b600062000d1282620028dd565b600062000d1282620028ab565b600062000d12826200288c565b60005b8381101562002907578181015183820152602001620028ed565b8381111562000cda5750506000910152565b601f01601f191690565b600381106200099057fe5b62002939816200288c565b81146200099057600080fd5b620029398162002899565b62002939816200289e565b600581106200099057600080fd5b600381106200099057600080fd5b62002939816200044556fe608060405234801561001057600080fd5b506040516102e13803806102e18339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291905050508181807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5560006060826001600160a01b0316846040518082805190602001908083835b602083106101535780518252601f199092019160209182019101610134565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b3576040519150601f19603f3d011682016040523d82523d6000602084013e6101b8565b606091505b50915091508181906102485760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561020d5781810151838201526020016101f5565b50505050905090810190601f16801561023a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050505060848061025d6000396000f3fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000846127105a03f43d806000803e818015604957816000f35b816000fdfea2646970667358221220479fe1a45f639b2b28264f0664c5040a754e68dd3840b29a2a20405474a7d2b164736f6c634300060c0033a26469706673582212201fc017016bd33cb57d8f2a34d07045a85f3ad8cc8d28daafac75d8a06cf7e6b764736f6c634300060c0033000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620001605760003560e01c80639eb2c7b211620000c9578063d2456de11162000087578063d2456de114620002bd578063da29fcfe14620002d4578063dc77205314620002eb578063df369ba71462000311578063ebb3d5891462000328578063f0bb66ac14620003325762000160565b80639eb2c7b21462000248578063a08d967d146200025f578063a5fede1d1462000276578063c108b47d146200028f578063c166f9ea14620002a65762000160565b806351dfdb48116200012357806351dfdb4814620001e5578063682cea1914620001fc5780636f022ac4146200020657806378ed2293146200021d578063893d20e8146200023457806393a2ecd9146200023e5762000160565b80630d2fcd7614620001655780630ee2cb10146200017e5780630fe6972b14620001a057806328eb9ca514620001b75780633f84c12c14620001ce575b600080fd5b6200017c62000176366004620019fd565b62000359565b005b6200018862000423565b604051620001979190620024ee565b60405180910390f35b6200017c620001b136600462001d14565b62000448565b6200017c620001c836600462001e4d565b62000670565b6200017c620001df36600462001dcd565b62000847565b6200017c620001f6366004620019fd565b62000983565b6200018862000993565b6200017c62000217366004620019fd565b620009b7565b6200017c6200022e366004620019fd565b620009c4565b62000188620009d1565b6200018862000ab6565b6200017c62000259366004620019fd565b62000ac5565b6200018862000270366004620019fd565b62000ad2565b6200028062000af3565b6040516200019791906200272b565b62000188620002a036600462001c70565b62000b03565b6200017c620002b736600462001a47565b62000bee565b6200017c620002ce36600462001a47565b62000c00565b6200017c620002e536600462001d14565b62000c0e565b62000302620002fc36600462001b4e565b62000ce0565b604051620001979190620026be565b6200017c6200032236600462001a86565b62000cda565b6200018862000d18565b620003496200034336600462001b83565b62000d3c565b604051620001979291906200250e565b62000363620009d1565b6001600160a01b0316336001600160a01b0316146200039f5760405162461bcd60e51b81526004016200039690620027a7565b60405180910390fd5b6000546001600160a01b031615620003cb5760405162461bcd60e51b815260040162000396906200273b565b600080546001600160a01b0319166001600160a01b0383161790556040517f38e37d5fdf60e4358769c3b616594ad451626b1e023c65eaa1062116feadacf89062000418908390620024ee565b60405180910390a150565b7f00000000000000000000000087a60129375d22489bbd287ec0d23129ef9290ef5b90565b62000452620009d1565b6001600160a01b0316336001600160a01b031614620004855760405162461bcd60e51b81526004016200039690620027a7565b82620004a55760405162461bcd60e51b8152600401620003969062002825565b828114620004c75760405162461bcd60e51b815260040162000396906200285b565b60005b8381101562000669576200051f858583818110620004e457fe5b9050602002016020810190620004fb9190620019fd565b8484848181106200050857fe5b9050602002016020810190620002fc919062001dac565b6200053e5760405162461bcd60e51b81526004016200039690620027b9565b6000600160008787858181106200055157fe5b9050602002016020810190620005689190620019fd565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585858181106200059757fe5b9050602002016020810190620005ae919062001dac565b6001600160e01b03191681526020810191909152604001600020805460ff1916911515919091179055848482818110620005e457fe5b9050602002016020810190620005fb9190620019fd565b6001600160a01b03167f04a77425d9eba3b1260e976806c0cdefae7f41bb1106222790dd45e863ceaf978484848181106200063257fe5b905060200201602081019062000649919062001dac565b604051620006589190620026ce565b60405180910390a2600101620004ca565b5050505050565b7f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab326001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ca57600080fd5b505afa158015620006df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000705919062001a26565b6001600160a01b0316336001600160a01b031614620007385760405162461bcd60e51b8152600401620003969062002837565b60008160028111156200074757fe5b1415620007685760405162461bcd60e51b815260040162000396906200286d565b6000546001600160a01b0316620007935760405162461bcd60e51b8152600401620003969062002795565b600054600160a01b900460ff16806002811115620007ad57fe5b826002811115620007ba57fe5b1415620007db5760405162461bcd60e51b8152600401620003969062002849565b6000805483919060ff60a01b1916600160a01b836002811115620007fb57fe5b02179055508160028111156200080d57fe5b8160028111156200081a57fe5b6040517ffaab041807e925180f5d7036a295923ff66f30f9d7957c96b898d16b0e90b7d890600090a35050565b60028560048111156200085657fe5b14620008625762000669565b336001600160a01b037f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab321614620008ad5760405162461bcd60e51b81526004016200039690620027dd565b6000846001600160a01b0316635a53e3486040518163ffffffff1660e01b815260040160206040518083038186803b158015620008e957600080fd5b505afa158015620008fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000924919062001a26565b9050806001600160a01b0316632b68b9c66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200096257600080fd5b505af115801562000977573d6000803e3d6000fd5b50505050505050505050565b6200099081600062000e3a565b50565b7f000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da90565b62000990816000620010b9565b6200099081600162000e3a565b600080600054600160a01b900460ff166002811115620009ed57fe5b141562000a1c57507f00000000000000000000000087a60129375d22489bbd287ec0d23129ef9290ef62000445565b7f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab326001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a7657600080fd5b505afa15801562000a8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab1919062001a26565b905090565b6000546001600160a01b031690565b62000990816001620010b9565b6001600160a01b03808216600090815260026020526040902054165b919050565b600054600160a01b900460ff1690565b60006001600054600160a01b900460ff16600281111562000b2057fe5b1462000b405760405162461bcd60e51b815260040162000396906200275f565b62000bba878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506001925062001220915050565b6001600160a01b038116600090815260026020526040902080546001600160a01b0319163317905590509695505050505050565b62000bfc82826001620013c6565b5050565b62000bfc82826000620013c6565b62000c18620009d1565b6001600160a01b0316336001600160a01b03161462000c4b5760405162461bcd60e51b81526004016200039690620027a7565b8262000c6b5760405162461bcd60e51b8152600401620003969062002813565b62000cda848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506200159192505050565b50505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b7f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab3290565b6000806001600054600160a01b900460ff16600281111562000d5a57fe5b1462000d7a5760405162461bcd60e51b815260040162000396906200275f565b62000e288b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506200171992505050565b91509150995099975050505050505050565b6001600054600160a01b900460ff16600281111562000e5557fe5b1462000e755760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062000ea5903390600401620024fe565b60206040518083038186803b15801562000ebe57600080fd5b505afa15801562000ed3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef9919062001d8b565b62000f185760405162461bcd60e51b81526004016200039690620027cb565b604051630fb5b3f960e31b81527f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32906000906001600160a01b03831690637dad9fc89062000f6b908890600401620024ee565b60806040518083038186803b15801562000f8457600080fd5b505afa15801562000f99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fbf919062001af0565b50506040516338b3eb1b60e01b81529092506001600160a01b03841691506338b3eb1b9062000ff5908890889060040162002637565b600060405180830381600087803b1580156200101057600080fd5b505af115801562001025573d6000803e3d6000fd5b50506040516382d3a1dd60e01b81526001600160a01b03841692506382d3a1dd91506200105a90889060019060040162002637565b600060405180830381600087803b1580156200107557600080fd5b505af11580156200108a573d6000803e3d6000fd5b505050506001600160a01b0316600090815260026020526040902080546001600160a01b031916905550505050565b6001600054600160a01b900460ff166002811115620010d457fe5b14620010f45760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062001124903390600401620024fe565b60206040518083038186803b1580156200113d57600080fd5b505afa15801562001152573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001178919062001d8b565b620011975760405162461bcd60e51b81526004016200039690620027cb565b604051634e4ea46d60e11b81526001600160a01b037f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab321690639c9d48da90620011e7908690869060040162002637565b600060405180830381600087803b1580156200120257600080fd5b505af115801562001217573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0386166200124b5760405162461bcd60e51b81526004016200039690620027ef565b606063399ae72460e01b87876040516024016200126a92919062002656565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600054915190925082916001600160a01b031690620012bb90620018f6565b620012c8929190620026de565b604051809103906000f080158015620012e5573d6000803e3d6000fd5b509150600085511180620012fa575060008451115b1562001365576040516396aed58760e01b81526001600160a01b038316906396aed5879062001330908890889060040162002702565b600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b505050505b821515876001600160a01b0316336001600160a01b03167f0e6310be2c106224ea5db41e7f599982b85c8524b0e7cd0c4fb88e2ac46554b5858a8a8a604051620013b3949392919062002675565b60405180910390a4505b95945050505050565b6001600054600160a01b900460ff166002811115620013e157fe5b14620014015760405162461bcd60e51b815260040162000396906200275f565b6001600160a01b0382811660009081526002602052604090205483911633146200143f5760405162461bcd60e51b8152600401620003969062002783565b604051633ef03e7560e11b815284906001600160a01b03821690637de07cea906200146f903390600401620024fe565b60206040518083038186803b1580156200148857600080fd5b505afa1580156200149d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014c3919062001d8b565b620014e25760405162461bcd60e51b81526004016200039690620027cb565b604051633457e6e760e21b81526001600160a01b037f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32169063d15f9b9c906200155690889088907f000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da90899060040162002534565b600060405180830381600087803b1580156200157157600080fd5b505af115801562001586573d6000803e3d6000fd5b505050505050505050565b8051825114620015b55760405162461bcd60e51b8152600401620003969062002801565b60005b82518110156200171457620015f6838281518110620015d357fe5b6020026020010151838381518110620015e857fe5b602002602001015162000ce0565b15620016165760405162461bcd60e51b8152600401620003969062002771565b60018060008584815181106200162857fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200165f57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110620016ad57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620016ec57fe5b6020026020010151604051620017039190620026ce565b60405180910390a2600101620015b8565b505050565b6000806001600160a01b038816620017455760405162461bcd60e51b815260040162000396906200274d565b6200175586868686600062001220565b6040516322a0c08b60e01b81529092506001600160a01b037f000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab3216906322a0c08b90620017cc907f000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da908c9087908d9060040162002571565b602060405180830381600087803b158015620017e757600080fd5b505af1158015620017fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001822919062001a26565b6040516382d3a1dd60e01b81529091506001600160a01b038316906382d3a1dd906200185690849060009060040162002637565b600060405180830381600087803b1580156200187157600080fd5b505af115801562001886573d6000803e3d6000fd5b50505050856001600160a01b0316886001600160a01b0316336001600160a01b03167f38d3196918721ec4627522d424d47f608e3f0f7e7a8f8abe5369150f7fc4b2a585858c8b8b8b604051620018e396959493929190620025bd565b60405180910390a4965096945050505050565b6102e1806200298383390190565b803562000d12816200292e565b805162000d12816200292e565b60008083601f8401126200193157600080fd5b50813567ffffffffffffffff8111156200194a57600080fd5b6020830191508360208202830111156200196357600080fd5b9250929050565b805162000d128162002945565b803562000d128162002950565b60008083601f8401126200199757600080fd5b50813567ffffffffffffffff811115620019b057600080fd5b6020830191508360018202830111156200196357600080fd5b803562000d12816200295b565b803562000d128162002969565b803562000d128162002977565b805162000d128162002977565b60006020828403121562001a1057600080fd5b600062001a1e848462001904565b949350505050565b60006020828403121562001a3957600080fd5b600062001a1e848462001911565b6000806040838503121562001a5b57600080fd5b600062001a69858562001904565b925050602062001a7c8582860162001904565b9150509250929050565b6000806000806080858703121562001a9d57600080fd5b600062001aab878762001904565b945050602062001abe8782880162001904565b935050604062001ad18782880162001904565b925050606062001ae48782880162001904565b91505092959194509250565b6000806000806080858703121562001b0757600080fd5b600062001b15878762001911565b945050602062001b288782880162001911565b935050604062001b3b8782880162001911565b925050606062001ae487828801620019f0565b6000806040838503121562001b6257600080fd5b600062001b70858562001904565b925050602062001a7c8582860162001977565b600080600080600080600080600060c08a8c03121562001ba257600080fd5b600062001bb08c8c62001904565b99505060208a013567ffffffffffffffff81111562001bce57600080fd5b62001bdc8c828d0162001984565b9850985050604062001bf18c828d0162001904565b965050606062001c048c828d01620019e3565b95505060808a013567ffffffffffffffff81111562001c2257600080fd5b62001c308c828d0162001984565b945094505060a08a013567ffffffffffffffff81111562001c5057600080fd5b62001c5e8c828d0162001984565b92509250509295985092959850929598565b6000806000806000806080878903121562001c8a57600080fd5b600062001c98898962001904565b965050602062001cab89828a01620019e3565b955050604087013567ffffffffffffffff81111562001cc957600080fd5b62001cd789828a0162001984565b9450945050606087013567ffffffffffffffff81111562001cf757600080fd5b62001d0589828a0162001984565b92509250509295509295509295565b6000806000806040858703121562001d2b57600080fd5b843567ffffffffffffffff81111562001d4357600080fd5b62001d51878288016200191e565b9450945050602085013567ffffffffffffffff81111562001d7157600080fd5b62001d7f878288016200191e565b95989497509550505050565b60006020828403121562001d9e57600080fd5b600062001a1e84846200196a565b60006020828403121562001dbf57600080fd5b600062001a1e848462001977565b600080600080600060a0868803121562001de657600080fd5b600062001df48888620019c9565b955050602062001e078882890162001904565b945050604062001e1a8882890162001904565b935050606062001e2d8882890162001904565b925050608062001e408882890162001904565b9150509295509295909350565b60006020828403121562001e6057600080fd5b600062001a1e8484620019d6565b62001e7981620028c3565b82525050565b62001e79816200288c565b62001e798162002899565b62001e79816200289e565b600062001ead826200287f565b62001eb9818562002883565b935062001ecb818560208601620028ea565b62001ed68162002919565b9093019392505050565b62001e7981620028d0565b600062001efa60328362002883565b7f736574436f6d7074726f6c6c65724c69623a20546869732076616c75652063618152716e206f6e6c7920626520736574206f6e636560701b602082015260400192915050565b600062001f5060278362002883565b7f5f5f6372656174654e657746756e643a205f6f776e65722063616e6e6f7420628152666520656d70747960c81b602082015260400192915050565b600062001f9b60138362002883565b7252656c65617365206973206e6f74204c69766560681b815260200192915050565b600062001fcc602d8362002883565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b60006200201d60388362002883565b7f4f6e6c792074686520436f6d7074726f6c6c657250726f78792063726561746f81527f722063616e2063616c6c20746869732066756e6374696f6e0000000000000000602082015260400192915050565b60006200207e604c8362002883565b7f73657452656c656173655374617475733a2043616e206f6e6c7920736574207481527f68652072656c6561736520737461747573207768656e20636f6d7074726f6c6c60208201526b195c931a58881a5cc81cd95d60a21b604082015260600192915050565b6000620020f4602e8362002883565b7f4f6e6c792074686520636f6e7472616374206f776e65722063616e2063616c6c81526d103a3434b990333ab731ba34b7b760911b602082015260400192915050565b60006200214660298362002883565b7f646572656769737465725661756c7443616c6c733a2043616c6c206e6f7420728152681959da5cdd195c995960ba1b602082015260400192915050565b60006200219360338362002883565b7f4f6e6c792061207065726d697373696f6e6564206d69677261746f722063616e8152721031b0b636103a3434b990333ab731ba34b7b760691b602082015260400192915050565b6000620021ea603d8362002883565b7f706f73744d6967726174654f726967696e486f6f6b3a204f6e6c79204469737081527f6174636865722063616e2063616c6c20746869732066756e6374696f6e000000602082015260400192915050565b60006200224b603c8362002883565b7f5f5f6465706c6f79436f6d7074726f6c6c657250726f78793a205f64656e6f6d81527f696e6174696f6e41737365742063616e6e6f7420626520656d70747900000000602082015260400192915050565b6000620022ac60298362002883565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b6000620022f960248362002883565b7f72656769737465725661756c7443616c6c733a20456d707479205f636f6e74728152636163747360e01b602082015260400192915050565b60006200234160268362002883565b7f646572656769737465725661756c7443616c6c733a20456d707479205f636f6e81526574726163747360d01b602082015260400192915050565b60006200238b60428362002883565b7f73657452656c656173655374617475733a204f6e6c792074686520446973706181527f7463686572206f776e65722063616e2063616c6c20746869732066756e63746960208201526137b760f11b604082015260600192915050565b6000620023f760338362002883565b7f73657452656c656173655374617475733a205f6e657874537461747573206973815272207468652063757272656e742073746174757360681b602082015260400192915050565b60006200244e60298362002883565b7f646572656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60006200249b60338362002883565b7f73657452656c656173655374617475733a2043616e6e6f742072657475726e20815272746f205072654c61756e63682073746174757360681b602082015260400192915050565b62001e798162000445565b6020810162000d12828462001e7f565b6020810162000d12828462001e6e565b604081016200251e828562001e7f565b6200252d602083018462001e7f565b9392505050565b6080810162002544828762001e7f565b62002553602083018662001e7f565b62002562604083018562001e7f565b620013bd606083018462001e8a565b6080810162002581828762001e7f565b62002590602083018662001e7f565b6200259f604083018562001e7f565b8181036060830152620025b3818462001ea0565b9695505050505050565b60c08101620025cd828962001e7f565b620025dc602083018862001e7f565b8181036040830152620025f0818762001ea0565b9050620026016060830186620024e3565b818103608083015262002615818562001ea0565b905081810360a08301526200262b818462001ea0565b98975050505050505050565b6040810162002647828562001e7f565b6200252d602083018462001e8a565b6040810162002666828562001e7f565b6200252d6020830184620024e3565b6080810162002685828762001e7f565b620026946020830186620024e3565b8181036040830152620026a8818562001ea0565b90508181036060830152620025b3818462001ea0565b6020810162000d12828462001e8a565b6020810162000d12828462001e95565b60408082528101620026f1818562001ea0565b90506200252d602083018462001e7f565b6040808252810162002715818562001ea0565b9050818103602083015262001a1e818462001ea0565b6020810162000d12828462001ee0565b6020808252810162000d128162001eeb565b6020808252810162000d128162001f41565b6020808252810162000d128162001f8c565b6020808252810162000d128162001fbd565b6020808252810162000d12816200200e565b6020808252810162000d12816200206f565b6020808252810162000d1281620020e5565b6020808252810162000d128162002137565b6020808252810162000d128162002184565b6020808252810162000d1281620021db565b6020808252810162000d12816200223c565b6020808252810162000d12816200229d565b6020808252810162000d1281620022ea565b6020808252810162000d128162002332565b6020808252810162000d12816200237c565b6020808252810162000d1281620023e8565b6020808252810162000d12816200243f565b6020808252810162000d12816200248c565b5190565b90815260200190565b600062000d1282620028b7565b151590565b6001600160e01b03191690565b8062000aee8162002923565b6001600160a01b031690565b600062000d1282620028dd565b600062000d1282620028ab565b600062000d12826200288c565b60005b8381101562002907578181015183820152602001620028ed565b8381111562000cda5750506000910152565b601f01601f191690565b600381106200099057fe5b62002939816200288c565b81146200099057600080fd5b620029398162002899565b62002939816200289e565b600581106200099057600080fd5b600381106200099057600080fd5b62002939816200044556fe608060405234801561001057600080fd5b506040516102e13803806102e18339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291905050508181807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5560006060826001600160a01b0316846040518082805190602001908083835b602083106101535780518252601f199092019160209182019101610134565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b3576040519150601f19603f3d011682016040523d82523d6000602084013e6101b8565b606091505b50915091508181906102485760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561020d5781810151838201526020016101f5565b50505050905090810190601f16801561023a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050505060848061025d6000396000f3fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000846127105a03f43d806000803e818015604957816000f35b816000fdfea2646970667358221220479fe1a45f639b2b28264f0664c5040a754e68dd3840b29a2a20405474a7d2b164736f6c634300060c0033a26469706673582212201fc017016bd33cb57d8f2a34d07045a85f3ad8cc8d28daafac75d8a06cf7e6b764736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _dispatcher (address): 0xC3DC853dD716bd5754f421ef94fdCbac3902ab32
Arg [1] : _vaultLib (address): 0xAC3fe07F51C51153E181bE892e4e37326EEA13Da
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32
Arg [1] : 000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.99998 | 10 | $10 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.