Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 37 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Strategy | 21542342 | 5 days ago | IN | 0 ETH | 0.00088605 | ||||
Create Strategy | 21542329 | 5 days ago | IN | 0 ETH | 0.00089359 | ||||
Create Strategy | 21044180 | 74 days ago | IN | 0 ETH | 0.00124111 | ||||
Create Strategy | 21044127 | 74 days ago | IN | 0 ETH | 0.0015251 | ||||
Create Strategy | 21044047 | 74 days ago | IN | 0 ETH | 0.00178759 | ||||
Add Strategy | 21044000 | 74 days ago | IN | 0 ETH | 0.00383228 | ||||
Create Strategy | 21043912 | 74 days ago | IN | 0 ETH | 0.00156962 | ||||
Create Strategy | 21043824 | 74 days ago | IN | 0 ETH | 0.00172564 | ||||
Add Strategy | 21043779 | 74 days ago | IN | 0 ETH | 0.00354758 | ||||
Create Strategy | 21026311 | 77 days ago | IN | 0 ETH | 0.00081024 | ||||
Create Strategy | 21026304 | 77 days ago | IN | 0 ETH | 0.00068835 | ||||
Create Strategy | 21026287 | 77 days ago | IN | 0 ETH | 0.00074028 | ||||
Create Strategy | 21026278 | 77 days ago | IN | 0 ETH | 0.00073728 | ||||
Create Strategy | 21026224 | 77 days ago | IN | 0 ETH | 0.00079032 | ||||
Create Strategy | 21026207 | 77 days ago | IN | 0 ETH | 0.00071178 | ||||
Create Strategy | 21026132 | 77 days ago | IN | 0 ETH | 0.00079077 | ||||
Create Strategy | 20962888 | 86 days ago | IN | 0 ETH | 0.00177513 | ||||
Create Strategy | 20962875 | 86 days ago | IN | 0 ETH | 0.00150648 | ||||
Create Strategy | 20962527 | 86 days ago | IN | 0 ETH | 0.00198953 | ||||
Create Strategy | 20962516 | 86 days ago | IN | 0 ETH | 0.00202022 | ||||
Add Strategy | 20876244 | 98 days ago | IN | 0 ETH | 0.00189575 | ||||
Create Strategy | 20783297 | 111 days ago | IN | 0 ETH | 0.00172329 | ||||
Add Strategy | 20783288 | 111 days ago | IN | 0 ETH | 0.00371323 | ||||
Create Strategy | 20640059 | 131 days ago | IN | 0 ETH | 0.00025288 | ||||
Create Strategy | 20582983 | 139 days ago | IN | 0 ETH | 0.00020924 |
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 Source Code Verified (Exact Match)
Contract Name:
StrategyFactory
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin-5/contracts/proxy/beacon/IBeacon.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.20; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeacon { /** * @dev Must return an address that can be used as a delegate call target. * * {UpgradeableBeacon} will check that this address is a contract. */ function implementation() external view returns (address); } // File: @openzeppelin-5/contracts/proxy/Proxy.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol) pragma solidity ^0.8.20; /** * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to * be specified by overriding the virtual {_implementation} function. * * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a * different contract through the {_delegate} function. * * The success and return data of the delegated call will be returned back to the caller of the proxy. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _delegate(address implementation) internal virtual { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev This is a virtual function that should be overridden so it returns the address to which the fallback * function and {_fallback} should delegate. */ function _implementation() internal view virtual returns (address); /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _fallback() internal virtual { _delegate(_implementation()); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other * function in the contract matches the call data. */ fallback() external payable virtual { _fallback(); } } // File: @openzeppelin-5/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @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 or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * 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. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @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`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // File: @openzeppelin-5/contracts/utils/StorageSlot.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol) // This file was procedurally generated from scripts/generate/templates/StorageSlot.js. pragma solidity ^0.8.20; /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ```solidity * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(newImplementation.code.length > 0); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` */ library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } struct StringSlot { string value; } struct BytesSlot { bytes value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `StringSlot` with member `value` located at `slot`. */ function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `StringSlot` representation of the string storage pointer `store`. */ function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := store.slot } } /** * @dev Returns an `BytesSlot` with member `value` located at `slot`. */ function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`. */ function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := store.slot } } } // File: @openzeppelin-5/contracts/proxy/ERC1967/ERC1967Utils.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol) pragma solidity ^0.8.20; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. */ library ERC1967Utils { // We re-declare ERC-1967 events here because they can't be used directly from IERC1967. // This will be fixed in Solidity 0.8.21. At that point we should remove these events. /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Emitted when the beacon is changed. */ event BeaconUpgraded(address indexed beacon); /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. */ // solhint-disable-next-line private-vars-leading-underscore bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev The `implementation` of the proxy is invalid. */ error ERC1967InvalidImplementation(address implementation); /** * @dev The `admin` of the proxy is invalid. */ error ERC1967InvalidAdmin(address admin); /** * @dev The `beacon` of the proxy is invalid. */ error ERC1967InvalidBeacon(address beacon); /** * @dev An upgrade function sees `msg.value > 0` that may be lost. */ error ERC1967NonPayable(); /** * @dev Returns the current implementation address. */ function getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { if (newImplementation.code.length == 0) { revert ERC1967InvalidImplementation(newImplementation); } StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Performs implementation upgrade with additional setup call if data is nonempty. * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected * to avoid stuck value in the contract. * * Emits an {IERC1967-Upgraded} event. */ function upgradeToAndCall(address newImplementation, bytes memory data) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); if (data.length > 0) { Address.functionDelegateCall(newImplementation, data); } else { _checkNonPayable(); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. */ // solhint-disable-next-line private-vars-leading-underscore bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Returns the current admin. * * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` */ function getAdmin() internal view returns (address) { return StorageSlot.getAddressSlot(ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { if (newAdmin == address(0)) { revert ERC1967InvalidAdmin(address(0)); } StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {IERC1967-AdminChanged} event. */ function changeAdmin(address newAdmin) internal { emit AdminChanged(getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is the keccak-256 hash of "eip1967.proxy.beacon" subtracted by 1. */ // solhint-disable-next-line private-vars-leading-underscore bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Returns the current beacon. */ function getBeacon() internal view returns (address) { return StorageSlot.getAddressSlot(BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { if (newBeacon.code.length == 0) { revert ERC1967InvalidBeacon(newBeacon); } StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon; address beaconImplementation = IBeacon(newBeacon).implementation(); if (beaconImplementation.code.length == 0) { revert ERC1967InvalidImplementation(beaconImplementation); } } /** * @dev Change the beacon and trigger a setup call if data is nonempty. * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected * to avoid stuck value in the contract. * * Emits an {IERC1967-BeaconUpgraded} event. * * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for * efficiency. */ function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0) { Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); } else { _checkNonPayable(); } } /** * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract * if an upgrade doesn't perform an initialization call. */ function _checkNonPayable() private { if (msg.value > 0) { revert ERC1967NonPayable(); } } } // File: @openzeppelin-5/contracts/proxy/beacon/BeaconProxy.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/BeaconProxy.sol) pragma solidity ^0.8.20; /** * @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}. * * The beacon address can only be set once during construction, and cannot be changed afterwards. It is stored in an * immutable variable to avoid unnecessary storage reads, and also in the beacon storage slot specified by * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] so that it can be accessed externally. * * CAUTION: Since the beacon address can never be changed, you must ensure that you either control the beacon, or trust * the beacon to not upgrade the implementation maliciously. * * IMPORTANT: Do not use the implementation logic to modify the beacon storage slot. Doing so would leave the proxy in * an inconsistent state where the beacon storage slot does not match the beacon address. */ contract BeaconProxy is Proxy { // An immutable address for the beacon to avoid unnecessary SLOADs before each delegate call. address private immutable _beacon; /** * @dev Initializes the proxy with `beacon`. * * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This * will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity * constructor. * * Requirements: * * - `beacon` must be a contract with the interface {IBeacon}. * - If `data` is empty, `msg.value` must be zero. */ constructor(address beacon, bytes memory data) payable { ERC1967Utils.upgradeBeaconToAndCall(beacon, data); _beacon = beacon; } /** * @dev Returns the current implementation address of the associated beacon. */ function _implementation() internal view virtual override returns (address) { return IBeacon(_getBeacon()).implementation(); } /** * @dev Returns the beacon. */ function _getBeacon() internal view virtual returns (address) { return _beacon; } } // File: @openzeppelin-5/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin-5/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin-5/contracts/proxy/beacon/UpgradeableBeacon.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/UpgradeableBeacon.sol) pragma solidity ^0.8.20; /** * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their * implementation contract, which is where they will delegate all function calls. * * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon. */ contract UpgradeableBeacon is IBeacon, Ownable { address private _implementation; /** * @dev The `implementation` of the beacon is invalid. */ error BeaconInvalidImplementation(address implementation); /** * @dev Emitted when the implementation returned by the beacon is changed. */ event Upgraded(address indexed implementation); /** * @dev Sets the address of the initial implementation, and the initial owner who can upgrade the beacon. */ constructor(address implementation_, address initialOwner) Ownable(initialOwner) { _setImplementation(implementation_); } /** * @dev Returns the current implementation address. */ function implementation() public view virtual returns (address) { return _implementation; } /** * @dev Upgrades the beacon to a new implementation. * * Emits an {Upgraded} event. * * Requirements: * * - msg.sender must be the owner of the contract. * - `newImplementation` must be a contract. */ function upgradeTo(address newImplementation) public virtual onlyOwner { _setImplementation(newImplementation); } /** * @dev Sets the implementation contract address for this beacon * * Requirements: * * - `newImplementation` must be a contract. */ function _setImplementation(address newImplementation) private { if (newImplementation.code.length == 0) { revert BeaconInvalidImplementation(newImplementation); } _implementation = newImplementation; emit Upgraded(newImplementation); } } // File: contracts/BIFI/infra/StrategyFactory.sol pragma solidity ^0.8.20; // Minimal proxy pattern for creating new Beefy strategies contract StrategyFactory is Ownable { /// @notice instance mapping to strategy name with version. mapping (string => UpgradeableBeacon) public instances; /// @notice approved rebalancer mapping mapping (address => bool) public rebalancers; /// @notice Pause state by strategyName mapping (string => bool) public strategyPause; /// @notice deployed strategy types string[] public strategyTypes; /// @notice The address of the native token address public native; /// @notice The address of the keeper address public keeper; /// @notice The beefy fee recipient address public beefyFeeRecipient; /// @notice The beefy fee config address public beefyFeeConfig; /// @notice Global pause state for all strategies that use this bool public globalPause; // Events event ProxyCreated(string strategyName, address proxy); event InstanceUpgraded(string strategyName, address newImplementation); event NewStrategyAdded(string strategyName, address implementation); event SetBeefyFeeRecipient(address beefyFeeRecipient); event SetBeefyFeeConfig(address beefyFeeConfig); event SetKeeper(address keeper); event GlobalPause(bool paused); event StratPause(string strategyName, bool paused); event RebalancerChanged(address rebalancer, bool isRebalancer); // Errors error NotManager(); error StratVersionExists(); /// @notice Throws if called by any account other than the owner or the keeper/ modifier onlyManager() { if (msg.sender != owner() && msg.sender != address(keeper)) revert NotManager(); _; } /// @notice Constructor initializes the keeper address constructor( address _native, address _keeper, address _beefyFeeRecipient, address _beefyFeeConfig ) Ownable(msg.sender) { native = _native; keeper = _keeper; beefyFeeRecipient = _beefyFeeRecipient; beefyFeeConfig = _beefyFeeConfig; } /** @notice Creates a new Beefy Strategy as a proxy of the template instance * @param _strategyName The name of the strategy * @return A reference to the new proxied Beefy Strategy */ function createStrategy(string calldata _strategyName) external returns (address) { // Create a new Beefy Strategy as a proxy of the template instance UpgradeableBeacon instance = instances[_strategyName]; BeaconProxy proxy = new BeaconProxy(address(instance), ""); emit ProxyCreated(_strategyName, address(proxy)); return address(proxy); } /** * @notice Upgrades the implementation of a strategy * @param _strategyName The name of the strategy * @param _newImplementation The new implementation address */ function upgradeTo(string calldata _strategyName, address _newImplementation) external onlyOwner { UpgradeableBeacon instance = instances[_strategyName]; instance.upgradeTo(_newImplementation); emit InstanceUpgraded(_strategyName, _newImplementation); } /** * @notice Adds a new strategy to the factory * @param _strategyName The name of the strategy * @param _implementation The implementation address */ function addStrategy(string calldata _strategyName, address _implementation) external onlyManager { if (address(instances[_strategyName]) != address(0)) revert StratVersionExists(); instances[_strategyName] = new UpgradeableBeacon(_implementation, address(this)); // Store in our deployed strategy type array strategyTypes.push(_strategyName); emit NewStrategyAdded(_strategyName, _implementation); } /** * @notice Pauses all strategies */ function pauseAllStrats() external onlyManager { globalPause = true; emit GlobalPause(true); } /** * @notice Unpauses all strategies */ function unpauseAllStrats() external onlyOwner { globalPause = false; emit GlobalPause(false); } function pauseStrategy(string calldata _strategyName) external onlyManager { strategyPause[_strategyName] = true; emit StratPause(_strategyName, true); } function unpauseStrategy(string calldata _strategyName) external onlyOwner { strategyPause[_strategyName] = false; emit StratPause(_strategyName, false); } /** * @notice Adds a rebalancer callable by the owner * @param _rebalancer The rebalancer address */ function addRebalancer(address _rebalancer) external onlyOwner { rebalancers[_rebalancer] = true; emit RebalancerChanged(_rebalancer, true); } /** * @notice Removes a rebalancer callable by a manager * @param _rebalancer The rebalancer address */ function removeRebalancer(address _rebalancer) external onlyManager { rebalancers[_rebalancer] = false; emit RebalancerChanged(_rebalancer, false); } /** * @notice set the beefy fee recipient address * @param _beefyFeeRecipient The new beefy fee recipient address */ function setBeefyFeeRecipient(address _beefyFeeRecipient) external onlyOwner { beefyFeeRecipient = _beefyFeeRecipient; emit SetBeefyFeeRecipient(_beefyFeeRecipient); } /** * @notice set the beefy fee config address * @param _beefyFeeConfig The new beefy fee config address */ function setBeefyFeeConfig(address _beefyFeeConfig) external onlyOwner { beefyFeeConfig = _beefyFeeConfig; emit SetBeefyFeeConfig(_beefyFeeConfig); } /** * @notice set the keeper address * @param _keeper The new keeper address */ function setKeeper(address _keeper) external onlyOwner { keeper = _keeper; emit SetKeeper(_keeper); } /** * @notice Gets the implementation of a strategy * @param _strategyName The name of the strategy * @return The implementation address */ function getImplementation(string calldata _strategyName) external view returns (address) { return instances[_strategyName].implementation(); } /** * @notice Gets the array of deployed strategies * @return The array of deployed strategies */ function getStrategyTypes() external view returns (string[] memory) { return strategyTypes; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_native","type":"address"},{"internalType":"address","name":"_keeper","type":"address"},{"internalType":"address","name":"_beefyFeeRecipient","type":"address"},{"internalType":"address","name":"_beefyFeeConfig","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"StratVersionExists","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"GlobalPause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"strategyName","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"InstanceUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"strategyName","type":"string"},{"indexed":false,"internalType":"address","name":"implementation","type":"address"}],"name":"NewStrategyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"strategyName","type":"string"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"}],"name":"ProxyCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"rebalancer","type":"address"},{"indexed":false,"internalType":"bool","name":"isRebalancer","type":"bool"}],"name":"RebalancerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beefyFeeConfig","type":"address"}],"name":"SetBeefyFeeConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beefyFeeRecipient","type":"address"}],"name":"SetBeefyFeeRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"keeper","type":"address"}],"name":"SetKeeper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"strategyName","type":"string"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"StratPause","type":"event"},{"inputs":[{"internalType":"address","name":"_rebalancer","type":"address"}],"name":"addRebalancer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_strategyName","type":"string"},{"internalType":"address","name":"_implementation","type":"address"}],"name":"addStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beefyFeeConfig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beefyFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_strategyName","type":"string"}],"name":"createStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_strategyName","type":"string"}],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStrategyTypes","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"instances","outputs":[{"internalType":"contract UpgradeableBeacon","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"native","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseAllStrats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_strategyName","type":"string"}],"name":"pauseStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rebalancers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rebalancer","type":"address"}],"name":"removeRebalancer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beefyFeeConfig","type":"address"}],"name":"setBeefyFeeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beefyFeeRecipient","type":"address"}],"name":"setBeefyFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"strategyPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"strategyTypes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseAllStrats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_strategyName","type":"string"}],"name":"unpauseStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_strategyName","type":"string"},{"internalType":"address","name":"_newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801562000010575f80fd5b5060405162001ed138038062001ed1833981016040819052620000339162000124565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200006481620000b9565b50600580546001600160a01b039586166001600160a01b03199182161790915560068054948616948216949094179093556007805492851692841692909217909155600880549190931691161790556200017e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011f575f80fd5b919050565b5f805f806080858703121562000138575f80fd5b620001438562000108565b9350620001536020860162000108565b9250620001636040860162000108565b9150620001736060860162000108565b905092959194509250565b611d45806200018c5f395ff3fe608060405234801562000010575f80fd5b5060043610620001a8575f3560e01c80638da5cb5b11620000eb578063c93d7715116200009f578063de73a5941162000077578063de73a59414620003da578063ed8ea600146200040b578063f12d54d81462000424578063f2fde38b1462000439575f80fd5b8063c93d771514620003a2578063cdd5d9dd14620003ac578063ce903bcc14620003c3575f80fd5b80638da5cb5b14620003125780638e1454591462000323578063940a9fa11462000337578063a44d57a01462000341578063a68833e51462000377578063aced1661146200038e575f80fd5b806343bc4b9a116200015f5780635a8b1a9f11620001375780635a8b1a9f14620002c35780636b68389614620002da578063715018a614620002f1578063748747e614620002fb575f80fd5b806343bc4b9a14620002725780634746fb551462000289578063517137ee146200029d575f80fd5b80630c97991914620001ac578063106fdbd014620001c5578063116fd50114620001dc57806311b0b42d1462000210578063194a4108146200022457806341a1914e146200023b575b5f80fd5b620001c3620001bd36600462000ebb565b62000450565b005b620001c3620001d636600462000ebb565b620004bb565b620001f3620001ed36600462000f21565b62000514565b6040516001600160a01b0390911681526020015b60405180910390f35b600554620001f3906001600160a01b031681565b620001c36200023536600462000f21565b620005d4565b620001f36200024c36600462000f78565b80516020818301810180516001825292820191909301209152546001600160a01b031681565b620001c36200028336600462000ebb565b62000690565b600854620001f3906001600160a01b031681565b620002b4620002ae3660046200102d565b6200072c565b6040516200020791906200108a565b620001c3620002d43660046200109e565b620007db565b620001f3620002eb36600462000f21565b620008a4565b620001c362000934565b620001c36200030c36600462000ebb565b6200094b565b5f546001600160a01b0316620001f3565b600754620001f3906001600160a01b031681565b620001c3620009a4565b620003666200035236600462000ebb565b60026020525f908152604090205460ff1681565b604051901515815260200162000207565b620001c36200038836600462000ebb565b620009f1565b600654620001f3906001600160a01b031681565b620001c362000a4a565b620001c3620003bd3660046200109e565b62000ad4565b620001c3620003d436600462000f21565b62000c75565b62000366620003eb36600462000f78565b805160208183018101805160038252928201919093012091525460ff1681565b6200041562000ce8565b604051620002079190620010f7565b6008546200036690600160a01b900460ff1681565b620001c36200044a36600462000ebb565b62000dc6565b6200045a62000e0d565b6001600160a01b0381165f81815260026020908152604091829020805460ff191660019081179091558251938452908301527fad7caca61f64c5976fc697122c9ff26acc30fc936092716798ff3b43cc54f80091015b60405180910390a150565b620004c562000e0d565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f91e28ce4210d103c13c5174847e463b836900f8dc63e9d9b42a4255169d1952990602001620004b0565b5f80600184846040516200052a9291906200115d565b908152604051908190036020018120546001600160a01b031691505f908290620005549062000e8a565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff0801580156200058c573d5f803e3d5ffd5b5090507f3699b7de9b98bb64c45028ff3593b0d6159da8016d0f85b6af11d765320c87bb858583604051620005c49392919062001194565b60405180910390a1949350505050565b5f546001600160a01b03163314801590620005fa57506006546001600160a01b03163314155b15620006195760405163607e454560e11b815260040160405180910390fd5b6001600383836040516200062f9291906200115d565b908152604051908190036020018120805492151560ff19909316929092179091557f32b2ef738db0485a8739f39e50322bb2c617e6a3d2539b4ecf26f199021057a690620006849084908490600190620011c1565b60405180910390a15050565b5f546001600160a01b03163314801590620006b657506006546001600160a01b03163314155b15620006d55760405163607e454560e11b815260040160405180910390fd5b6001600160a01b0381165f818152600260209081526040808320805460ff191690558051938452908301919091527fad7caca61f64c5976fc697122c9ff26acc30fc936092716798ff3b43cc54f8009101620004b0565b600481815481106200073c575f80fd5b905f5260205f20015f9150905080546200075690620011e8565b80601f01602080910402602001604051908101604052809291908181526020018280546200078490620011e8565b8015620007d35780601f10620007a957610100808354040283529160200191620007d3565b820191905f5260205f20905b815481529060010190602001808311620007b557829003601f168201915b505050505081565b620007e562000e0d565b5f60018484604051620007fa9291906200115d565b90815260405190819003602001812054631b2ce7f360e11b82526001600160a01b0384811660048401521691508190633659cfe6906024015f604051808303815f87803b1580156200084a575f80fd5b505af11580156200085d573d5f803e3d5ffd5b505050507f52a6e00a16a485598386bd39b6aac98ed50e4fbde10ef9b5c18374faecb55010848484604051620008969392919062001194565b60405180910390a150505050565b5f60018383604051620008b99291906200115d565b908152604080516020928190038301812054635c60da1b60e01b825291516001600160a01b0390921692635c60da1b926004808401938290030181865afa15801562000907573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200092d919062001222565b9392505050565b6200093e62000e0d565b620009495f62000e3b565b565b6200095562000e0d565b600680546001600160a01b0319166001600160a01b0383169081179091556040519081527fefb5cfa1a8690c124332ab93324539c5c9c4be03f28aeb8be86f2d8a0c9fb99b90602001620004b0565b620009ae62000e0d565b6008805460ff60a01b191690556040515f81527fa5fea31b6dbd7aec6098ca4653b1d51af1ef786fcb19031c4c4e55b675535f1e906020015b60405180910390a1565b620009fb62000e0d565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f8041329bf7057543a2c2ff4e4071d1d488a31f82ed44e169b5cd2f04f5e3ac8590602001620004b0565b5f546001600160a01b0316331480159062000a7057506006546001600160a01b03163314155b1562000a8f5760405163607e454560e11b815260040160405180910390fd5b6008805460ff60a01b1916600160a01b179055604051600181527fa5fea31b6dbd7aec6098ca4653b1d51af1ef786fcb19031c4c4e55b675535f1e90602001620009e7565b5f546001600160a01b0316331480159062000afa57506006546001600160a01b03163314155b1562000b195760405163607e454560e11b815260040160405180910390fd5b5f6001600160a01b03166001848460405162000b379291906200115d565b908152604051908190036020019020546001600160a01b03161462000b6f57604051631f93a2cd60e01b815260040160405180910390fd5b803060405162000b7f9062000e98565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562000bb0573d5f803e3d5ffd5b506001848460405162000bc59291906200115d565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055600480546001810182555f919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0162000c3283858362001290565b507fa065c3b00cde146f5df407afa0661cfa2c0ed2efd62ac00b3241aaae02ff5d2e83838360405162000c689392919062001194565b60405180910390a1505050565b62000c7f62000e0d565b5f6003838360405162000c949291906200115d565b908152604051908190036020018120805492151560ff19909316929092179091557f32b2ef738db0485a8739f39e50322bb2c617e6a3d2539b4ecf26f199021057a6906200068490849084905f90620011c1565b60606004805480602002602001604051908101604052809291908181526020015f905b8282101562000dbd578382905f5260205f2001805462000d2b90620011e8565b80601f016020809104026020016040519081016040528092919081815260200182805462000d5990620011e8565b801562000da85780601f1062000d7e5761010080835404028352916020019162000da8565b820191905f5260205f20905b81548152906001019060200180831162000d8a57829003601f168201915b50505050508152602001906001019062000d0b565b50505050905090565b62000dd062000e0d565b6001600160a01b03811662000dff57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b62000e0a8162000e3b565b50565b5f546001600160a01b03163314620009495760405163118cdaa760e01b815233600482015260240162000df6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610597806200135883390190565b61042180620018ef83390190565b6001600160a01b038116811462000e0a575f80fd5b5f6020828403121562000ecc575f80fd5b81356200092d8162000ea6565b5f8083601f84011262000eea575f80fd5b50813567ffffffffffffffff81111562000f02575f80fd5b60208301915083602082850101111562000f1a575f80fd5b9250929050565b5f806020838503121562000f33575f80fd5b823567ffffffffffffffff81111562000f4a575f80fd5b62000f588582860162000ed9565b90969095509350505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121562000f89575f80fd5b813567ffffffffffffffff8082111562000fa1575f80fd5b818401915084601f83011262000fb5575f80fd5b81358181111562000fca5762000fca62000f64565b604051601f8201601f19908116603f0116810190838211818310171562000ff55762000ff562000f64565b816040528281528760208487010111156200100e575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156200103e575f80fd5b5035919050565b5f81518084525f5b818110156200106b576020818501810151868301820152016200104d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6200092d602083018462001045565b5f805f60408486031215620010b1575f80fd5b833567ffffffffffffffff811115620010c8575f80fd5b620010d68682870162000ed9565b9094509250506020840135620010ec8162000ea6565b809150509250925092565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b828110156200115057603f198886030184526200113d85835162001045565b945092850192908501906001016200111e565b5092979650505050505050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f620011a96040830185876200116c565b905060018060a01b0383166020830152949350505050565b604081525f620011d66040830185876200116c565b90508215156020830152949350505050565b600181811c90821680620011fd57607f821691505b6020821081036200121c57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121562001233575f80fd5b81516200092d8162000ea6565b601f8211156200128b57805f5260205f20601f840160051c81016020851015620012675750805b601f840160051c820191505b8181101562001288575f815560010162001273565b50505b505050565b67ffffffffffffffff831115620012ab57620012ab62000f64565b620012c383620012bc8354620011e8565b8362001240565b5f601f841160018114620012f7575f8515620012df5750838201355b5f19600387901b1c1916600186901b17835562001288565b5f83815260208120601f198716915b8281101562001328578685013582556020948501946001909201910162001306565b508682101562001345575f1960f88860031b161c19848701351681555b505060018560011b018355505050505056fe60a060405260405161059738038061059783398101604081905261002291610376565b61002c828261003e565b506001600160a01b0316608052610465565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610431565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610431565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f80846001600160a01b031684604051610225919061044a565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461033b575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b8381101561036e578181015183820152602001610356565b50505f910152565b5f8060408385031215610387575f80fd5b61039083610325565b60208401519092506001600160401b03808211156103ac575f80fd5b818501915085601f8301126103bf575f80fd5b8151818111156103d1576103d1610340565b604051601f8201601f19908116603f011681019083821181831017156103f9576103f9610340565b81604052828152886020848701011115610411575f80fd5b610422836020830160208801610354565b80955050505050509250929050565b5f60208284031215610441575f80fd5b6102f582610325565b5f825161045b818460208701610354565b9190910192915050565b60805161011b61047c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f80375f80365f845af43d5f803e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f80fd5b81516001600160a01b038116811460de575f80fd5b939250505056fea2646970667358221220679490f07e8ea48ac649143f49bb5cf387b335ed902fd295984df927f59ffe5564736f6c63430008170033608060405234801561000f575f80fd5b5060405161042138038061042183398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b6102848061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f80fd5b61006c610067366004610221565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c6100d6565b5f546001600160a01b031661007b565b61006c6100bd366004610221565b6100e9565b6100ca610128565b6100d381610154565b50565b6100de610128565b6100e75f6101d2565b565b6100f1610128565b6001600160a01b03811661011f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d3816101d2565b5f546001600160a01b031633146100e75760405163118cdaa760e01b8152336004820152602401610116565b806001600160a01b03163b5f036101895760405163211eb15960e21b81526001600160a01b0382166004820152602401610116565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610231575f80fd5b81356001600160a01b0381168114610247575f80fd5b939250505056fea264697066735822122045db1cee5ff2aafd92b0060a8675f7b04958cfd18e4a9cce9867856e6377cd4964736f6c63430008170033a2646970667358221220ff9298ffa7b9f3a9babfc6e0b1b82ab69cbac1cbf04da858a5ac3369c547843c64736f6c63430008170033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b61900000000000000000000000065f2145693be3e75b8cfb2e318a3a74d057e6c7b0000000000000000000000003d38ba27974410679aff73abd096d7ba58870ead
Deployed Bytecode
0x608060405234801562000010575f80fd5b5060043610620001a8575f3560e01c80638da5cb5b11620000eb578063c93d7715116200009f578063de73a5941162000077578063de73a59414620003da578063ed8ea600146200040b578063f12d54d81462000424578063f2fde38b1462000439575f80fd5b8063c93d771514620003a2578063cdd5d9dd14620003ac578063ce903bcc14620003c3575f80fd5b80638da5cb5b14620003125780638e1454591462000323578063940a9fa11462000337578063a44d57a01462000341578063a68833e51462000377578063aced1661146200038e575f80fd5b806343bc4b9a116200015f5780635a8b1a9f11620001375780635a8b1a9f14620002c35780636b68389614620002da578063715018a614620002f1578063748747e614620002fb575f80fd5b806343bc4b9a14620002725780634746fb551462000289578063517137ee146200029d575f80fd5b80630c97991914620001ac578063106fdbd014620001c5578063116fd50114620001dc57806311b0b42d1462000210578063194a4108146200022457806341a1914e146200023b575b5f80fd5b620001c3620001bd36600462000ebb565b62000450565b005b620001c3620001d636600462000ebb565b620004bb565b620001f3620001ed36600462000f21565b62000514565b6040516001600160a01b0390911681526020015b60405180910390f35b600554620001f3906001600160a01b031681565b620001c36200023536600462000f21565b620005d4565b620001f36200024c36600462000f78565b80516020818301810180516001825292820191909301209152546001600160a01b031681565b620001c36200028336600462000ebb565b62000690565b600854620001f3906001600160a01b031681565b620002b4620002ae3660046200102d565b6200072c565b6040516200020791906200108a565b620001c3620002d43660046200109e565b620007db565b620001f3620002eb36600462000f21565b620008a4565b620001c362000934565b620001c36200030c36600462000ebb565b6200094b565b5f546001600160a01b0316620001f3565b600754620001f3906001600160a01b031681565b620001c3620009a4565b620003666200035236600462000ebb565b60026020525f908152604090205460ff1681565b604051901515815260200162000207565b620001c36200038836600462000ebb565b620009f1565b600654620001f3906001600160a01b031681565b620001c362000a4a565b620001c3620003bd3660046200109e565b62000ad4565b620001c3620003d436600462000f21565b62000c75565b62000366620003eb36600462000f78565b805160208183018101805160038252928201919093012091525460ff1681565b6200041562000ce8565b604051620002079190620010f7565b6008546200036690600160a01b900460ff1681565b620001c36200044a36600462000ebb565b62000dc6565b6200045a62000e0d565b6001600160a01b0381165f81815260026020908152604091829020805460ff191660019081179091558251938452908301527fad7caca61f64c5976fc697122c9ff26acc30fc936092716798ff3b43cc54f80091015b60405180910390a150565b620004c562000e0d565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f91e28ce4210d103c13c5174847e463b836900f8dc63e9d9b42a4255169d1952990602001620004b0565b5f80600184846040516200052a9291906200115d565b908152604051908190036020018120546001600160a01b031691505f908290620005549062000e8a565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff0801580156200058c573d5f803e3d5ffd5b5090507f3699b7de9b98bb64c45028ff3593b0d6159da8016d0f85b6af11d765320c87bb858583604051620005c49392919062001194565b60405180910390a1949350505050565b5f546001600160a01b03163314801590620005fa57506006546001600160a01b03163314155b15620006195760405163607e454560e11b815260040160405180910390fd5b6001600383836040516200062f9291906200115d565b908152604051908190036020018120805492151560ff19909316929092179091557f32b2ef738db0485a8739f39e50322bb2c617e6a3d2539b4ecf26f199021057a690620006849084908490600190620011c1565b60405180910390a15050565b5f546001600160a01b03163314801590620006b657506006546001600160a01b03163314155b15620006d55760405163607e454560e11b815260040160405180910390fd5b6001600160a01b0381165f818152600260209081526040808320805460ff191690558051938452908301919091527fad7caca61f64c5976fc697122c9ff26acc30fc936092716798ff3b43cc54f8009101620004b0565b600481815481106200073c575f80fd5b905f5260205f20015f9150905080546200075690620011e8565b80601f01602080910402602001604051908101604052809291908181526020018280546200078490620011e8565b8015620007d35780601f10620007a957610100808354040283529160200191620007d3565b820191905f5260205f20905b815481529060010190602001808311620007b557829003601f168201915b505050505081565b620007e562000e0d565b5f60018484604051620007fa9291906200115d565b90815260405190819003602001812054631b2ce7f360e11b82526001600160a01b0384811660048401521691508190633659cfe6906024015f604051808303815f87803b1580156200084a575f80fd5b505af11580156200085d573d5f803e3d5ffd5b505050507f52a6e00a16a485598386bd39b6aac98ed50e4fbde10ef9b5c18374faecb55010848484604051620008969392919062001194565b60405180910390a150505050565b5f60018383604051620008b99291906200115d565b908152604080516020928190038301812054635c60da1b60e01b825291516001600160a01b0390921692635c60da1b926004808401938290030181865afa15801562000907573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200092d919062001222565b9392505050565b6200093e62000e0d565b620009495f62000e3b565b565b6200095562000e0d565b600680546001600160a01b0319166001600160a01b0383169081179091556040519081527fefb5cfa1a8690c124332ab93324539c5c9c4be03f28aeb8be86f2d8a0c9fb99b90602001620004b0565b620009ae62000e0d565b6008805460ff60a01b191690556040515f81527fa5fea31b6dbd7aec6098ca4653b1d51af1ef786fcb19031c4c4e55b675535f1e906020015b60405180910390a1565b620009fb62000e0d565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f8041329bf7057543a2c2ff4e4071d1d488a31f82ed44e169b5cd2f04f5e3ac8590602001620004b0565b5f546001600160a01b0316331480159062000a7057506006546001600160a01b03163314155b1562000a8f5760405163607e454560e11b815260040160405180910390fd5b6008805460ff60a01b1916600160a01b179055604051600181527fa5fea31b6dbd7aec6098ca4653b1d51af1ef786fcb19031c4c4e55b675535f1e90602001620009e7565b5f546001600160a01b0316331480159062000afa57506006546001600160a01b03163314155b1562000b195760405163607e454560e11b815260040160405180910390fd5b5f6001600160a01b03166001848460405162000b379291906200115d565b908152604051908190036020019020546001600160a01b03161462000b6f57604051631f93a2cd60e01b815260040160405180910390fd5b803060405162000b7f9062000e98565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562000bb0573d5f803e3d5ffd5b506001848460405162000bc59291906200115d565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055600480546001810182555f919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0162000c3283858362001290565b507fa065c3b00cde146f5df407afa0661cfa2c0ed2efd62ac00b3241aaae02ff5d2e83838360405162000c689392919062001194565b60405180910390a1505050565b62000c7f62000e0d565b5f6003838360405162000c949291906200115d565b908152604051908190036020018120805492151560ff19909316929092179091557f32b2ef738db0485a8739f39e50322bb2c617e6a3d2539b4ecf26f199021057a6906200068490849084905f90620011c1565b60606004805480602002602001604051908101604052809291908181526020015f905b8282101562000dbd578382905f5260205f2001805462000d2b90620011e8565b80601f016020809104026020016040519081016040528092919081815260200182805462000d5990620011e8565b801562000da85780601f1062000d7e5761010080835404028352916020019162000da8565b820191905f5260205f20905b81548152906001019060200180831162000d8a57829003601f168201915b50505050508152602001906001019062000d0b565b50505050905090565b62000dd062000e0d565b6001600160a01b03811662000dff57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b62000e0a8162000e3b565b50565b5f546001600160a01b03163314620009495760405163118cdaa760e01b815233600482015260240162000df6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610597806200135883390190565b61042180620018ef83390190565b6001600160a01b038116811462000e0a575f80fd5b5f6020828403121562000ecc575f80fd5b81356200092d8162000ea6565b5f8083601f84011262000eea575f80fd5b50813567ffffffffffffffff81111562000f02575f80fd5b60208301915083602082850101111562000f1a575f80fd5b9250929050565b5f806020838503121562000f33575f80fd5b823567ffffffffffffffff81111562000f4a575f80fd5b62000f588582860162000ed9565b90969095509350505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121562000f89575f80fd5b813567ffffffffffffffff8082111562000fa1575f80fd5b818401915084601f83011262000fb5575f80fd5b81358181111562000fca5762000fca62000f64565b604051601f8201601f19908116603f0116810190838211818310171562000ff55762000ff562000f64565b816040528281528760208487010111156200100e575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156200103e575f80fd5b5035919050565b5f81518084525f5b818110156200106b576020818501810151868301820152016200104d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6200092d602083018462001045565b5f805f60408486031215620010b1575f80fd5b833567ffffffffffffffff811115620010c8575f80fd5b620010d68682870162000ed9565b9094509250506020840135620010ec8162000ea6565b809150509250925092565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b828110156200115057603f198886030184526200113d85835162001045565b945092850192908501906001016200111e565b5092979650505050505050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f620011a96040830185876200116c565b905060018060a01b0383166020830152949350505050565b604081525f620011d66040830185876200116c565b90508215156020830152949350505050565b600181811c90821680620011fd57607f821691505b6020821081036200121c57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121562001233575f80fd5b81516200092d8162000ea6565b601f8211156200128b57805f5260205f20601f840160051c81016020851015620012675750805b601f840160051c820191505b8181101562001288575f815560010162001273565b50505b505050565b67ffffffffffffffff831115620012ab57620012ab62000f64565b620012c383620012bc8354620011e8565b8362001240565b5f601f841160018114620012f7575f8515620012df5750838201355b5f19600387901b1c1916600186901b17835562001288565b5f83815260208120601f198716915b8281101562001328578685013582556020948501946001909201910162001306565b508682101562001345575f1960f88860031b161c19848701351681555b505060018560011b018355505050505056fe60a060405260405161059738038061059783398101604081905261002291610376565b61002c828261003e565b506001600160a01b0316608052610465565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610431565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610431565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f80846001600160a01b031684604051610225919061044a565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461033b575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5b8381101561036e578181015183820152602001610356565b50505f910152565b5f8060408385031215610387575f80fd5b61039083610325565b60208401519092506001600160401b03808211156103ac575f80fd5b818501915085601f8301126103bf575f80fd5b8151818111156103d1576103d1610340565b604051601f8201601f19908116603f011681019083821181831017156103f9576103f9610340565b81604052828152886020848701011115610411575f80fd5b610422836020830160208801610354565b80955050505050509250929050565b5f60208284031215610441575f80fd5b6102f582610325565b5f825161045b818460208701610354565b9190910192915050565b60805161011b61047c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f80375f80365f845af43d5f803e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f80fd5b81516001600160a01b038116811460de575f80fd5b939250505056fea2646970667358221220679490f07e8ea48ac649143f49bb5cf387b335ed902fd295984df927f59ffe5564736f6c63430008170033608060405234801561000f575f80fd5b5060405161042138038061042183398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b6102848061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f80fd5b61006c610067366004610221565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c6100d6565b5f546001600160a01b031661007b565b61006c6100bd366004610221565b6100e9565b6100ca610128565b6100d381610154565b50565b6100de610128565b6100e75f6101d2565b565b6100f1610128565b6001600160a01b03811661011f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d3816101d2565b5f546001600160a01b031633146100e75760405163118cdaa760e01b8152336004820152602401610116565b806001600160a01b03163b5f036101895760405163211eb15960e21b81526001600160a01b0382166004820152602401610116565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610231575f80fd5b81356001600160a01b0381168114610247575f80fd5b939250505056fea264697066735822122045db1cee5ff2aafd92b0060a8675f7b04958cfd18e4a9cce9867856e6377cd4964736f6c63430008170033a2646970667358221220ff9298ffa7b9f3a9babfc6e0b1b82ab69cbac1cbf04da858a5ac3369c547843c64736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b61900000000000000000000000065f2145693be3e75b8cfb2e318a3a74d057e6c7b0000000000000000000000003d38ba27974410679aff73abd096d7ba58870ead
-----Decoded View---------------
Arg [0] : _native (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _keeper (address): 0x4fED5491693007f0CD49f4614FFC38Ab6A04B619
Arg [2] : _beefyFeeRecipient (address): 0x65f2145693bE3E75B8cfB2E318A3a74D057e6c7B
Arg [3] : _beefyFeeConfig (address): 0x3d38BA27974410679afF73abD096D7Ba58870EAd
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 0000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b619
Arg [2] : 00000000000000000000000065f2145693be3e75b8cfb2e318a3a74d057e6c7b
Arg [3] : 0000000000000000000000003d38ba27974410679aff73abd096d7ba58870ead
Deployed Bytecode Sourcemap
29505:6568:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34170:165;;;;;;:::i;:::-;;:::i;:::-;;35107:172;;;;;;:::i;:::-;;:::i;31797:396::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1335:32:1;;;1317:51;;1305:2;1290:18;31797:396:0;;;;;;;;30003:21;;;;;-1:-1:-1;;;;;30003:21:0;;;33680:176;;;;;;:::i;:::-;;:::i;29615:54::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29615:54:0;;;34466:172;;;;;;:::i;:::-;;:::i;30226:29::-;;;;;-1:-1:-1;;;;;30226:29:0;;;29916;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32390:285::-;;;;;;:::i;:::-;;:::i;35681:157::-;;;;;;:::i;:::-;;:::i;26284:103::-;;;:::i;35386:124::-;;;;;;:::i;:::-;;:::i;25609:87::-;25655:7;25682:6;-1:-1:-1;;;;;25682:6:0;25609:87;;30147:32;;;;;-1:-1:-1;;;;;30147:32:0;;;33553:119;;;:::i;29723:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4226:14:1;;4219:22;4201:41;;4189:2;4174:18;29723:44:0;4061:187:1;34782:190:0;;;;;;:::i;:::-;;:::i;30076:21::-;;;;;-1:-1:-1;;;;;30076:21:0;;;33372:117;;;:::i;32858:452::-;;;;;;:::i;:::-;;:::i;33864:178::-;;;;;;:::i;:::-;;:::i;29821:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35963:107;;;:::i;:::-;;;;;;;:::i;30333:23::-;;;;;-1:-1:-1;;;30333:23:0;;;;;;26542:220;;;;;;:::i;:::-;;:::i;34170:165::-;25495:13;:11;:13::i;:::-;-1:-1:-1;;;;;34244:24:0;::::1;;::::0;;;:11:::1;:24;::::0;;;;;;;;:31;;-1:-1:-1;;34244:31:0::1;34271:4;34244:31:::0;;::::1;::::0;;;34291:36;;5229:51:1;;;5296:18;;;5289:50;34291:36:0::1;::::0;5202:18:1;34291:36:0::1;;;;;;;;34170:165:::0;:::o;35107:172::-;25495:13;:11;:13::i;:::-;35189:14:::1;:32:::0;;-1:-1:-1;;;;;;35189:32:0::1;-1:-1:-1::0;;;;;35189:32:0;::::1;::::0;;::::1;::::0;;;35237:34:::1;::::0;1317:51:1;;;35237:34:0::1;::::0;1305:2:1;1290:18;35237:34:0::1;1171:203:1::0;31797:396:0;31870:7;31968:26;31997:9;32007:13;;31997:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;31997:24:0;;-1:-1:-1;31997:24:0;;;;32052:38;;;:::i;:::-;-1:-1:-1;;;;;5857:32:1;;;5839:51;;5926:2;5921;5906:18;;5899:30;;;-1:-1:-1;5945:18:1;;;5938:29;5999:2;5984:18;32052:38:0;;;;;;;;;;;;;;;;;;;;;;;32032:58;;32108:43;32121:13;;32144:5;32108:43;;;;;;;;:::i;:::-;;;;;;;;32179:5;31797:396;-1:-1:-1;;;;31797:396:0:o;33680:176::-;25655:7;25682:6;-1:-1:-1;;;;;25682:6:0;31107:10;:21;;;;:54;;-1:-1:-1;31154:6:0;;-1:-1:-1;;;;;31154:6:0;31132:10;:29;;31107:54;31103:79;;;31170:12;;-1:-1:-1;;;31170:12:0;;;;;;;;;;;31103:79;33797:4:::1;33766:13;33780;;33766:28;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:35;;;::::1;;-1:-1:-1::0;;33766:35:0;;::::1;::::0;;;::::1;::::0;;;33817:31:::1;::::0;::::1;::::0;33828:13;;;;33766:35;;33817:31:::1;:::i;:::-;;;;;;;;33680:176:::0;;:::o;34466:172::-;25655:7;25682:6;-1:-1:-1;;;;;25682:6:0;31107:10;:21;;;;:54;;-1:-1:-1;31154:6:0;;-1:-1:-1;;;;;31154:6:0;31132:10;:29;;31107:54;31103:79;;;31170:12;;-1:-1:-1;;;31170:12:0;;;;;;;;;;;31103:79;-1:-1:-1;;;;;34545:24:0;::::1;34572:5;34545:24:::0;;;:11:::1;:24;::::0;;;;;;;:32;;-1:-1:-1;;34545:32:0::1;::::0;;34593:37;;5229:51:1;;;5296:18;;;5289:50;;;;34593:37:0::1;::::0;5202:18:1;34593:37:0::1;5061:284:1::0;29916:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32390:285::-;25495:13;:11;:13::i;:::-;32498:26:::1;32527:9;32537:13;;32527:24;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;32562:38:0;;-1:-1:-1;;;;;1335:32:1;;;32562:38:0::1;::::0;::::1;1317:51:1::0;32527:24:0::1;::::0;-1:-1:-1;32527:24:0;;32562:18:::1;::::0;1290::1;;32562:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32616:51;32633:13;;32648:18;32616:51;;;;;;;;:::i;:::-;;;;;;;;32487:188;32390:285:::0;;;:::o;35681:157::-;35762:7;35789:9;35799:13;;35789:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;35789:41:0;;;;-1:-1:-1;;;;;35789:24:0;;;;:39;;:41;;;;;;;;;;:24;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35782:48;35681:157;-1:-1:-1;;;35681:157:0:o;26284:103::-;25495:13;:11;:13::i;:::-;26349:30:::1;26376:1;26349:18;:30::i;:::-;26284:103::o:0;35386:124::-;25495:13;:11;:13::i;:::-;35452:6:::1;:16:::0;;-1:-1:-1;;;;;;35452:16:0::1;-1:-1:-1::0;;;;;35452:16:0;::::1;::::0;;::::1;::::0;;;35484:18:::1;::::0;1317:51:1;;;35484:18:0::1;::::0;1305:2:1;1290:18;35484::0::1;1171:203:1::0;33553:119:0;25495:13;:11;:13::i;:::-;33611:11:::1;:19:::0;;-1:-1:-1;;;;33611:19:0::1;::::0;;33646:18:::1;::::0;-1:-1:-1;4201:41:1;;33646:18:0::1;::::0;4189:2:1;4174:18;33646::0::1;;;;;;;;33553:119::o:0;34782:190::-;25495:13;:11;:13::i;:::-;34870:17:::1;:38:::0;;-1:-1:-1;;;;;;34870:38:0::1;-1:-1:-1::0;;;;;34870:38:0;::::1;::::0;;::::1;::::0;;;34924:40:::1;::::0;1317:51:1;;;34924:40:0::1;::::0;1305:2:1;1290:18;34924:40:0::1;1171:203:1::0;33372:117:0;25655:7;25682:6;-1:-1:-1;;;;;25682:6:0;31107:10;:21;;;;:54;;-1:-1:-1;31154:6:0;;-1:-1:-1;;;;;31154:6:0;31132:10;:29;;31107:54;31103:79;;;31170:12;;-1:-1:-1;;;31170:12:0;;;;;;;;;;;31103:79;33430:11:::1;:18:::0;;-1:-1:-1;;;;33430:18:0::1;-1:-1:-1::0;;;33430:18:0::1;::::0;;33464:17:::1;::::0;-1:-1:-1;4201:41:1;;33464:17:0::1;::::0;4189:2:1;4174:18;33464:17:0::1;4061:187:1::0;32858:452:0;25655:7;25682:6;-1:-1:-1;;;;;25682:6:0;31107:10;:21;;;;:54;;-1:-1:-1;31154:6:0;;-1:-1:-1;;;;;31154:6:0;31132:10;:29;;31107:54;31103:79;;;31170:12;;-1:-1:-1;;;31170:12:0;;;;;;;;;;;31103:79;33016:1:::1;-1:-1:-1::0;;;;;32971:47:0::1;32979:9;32989:13;;32979:24;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;32979:24:0::1;32971:47;32967:80;;33027:20;;-1:-1:-1::0;;;33027:20:0::1;;;;;;;;;;;32967:80;33107:15;33132:4;33085:53;;;;;:::i;:::-;-1:-1:-1::0;;;;;7838:15:1;;;7820:34;;7890:15;;7885:2;7870:18;;7863:43;7770:2;7755:18;33085:53:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33058:9;33068:13;;33058:24;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:80;;-1:-1:-1;;;;;33058:80:0;;;::::1;-1:-1:-1::0;;;;;;33058:80:0;;::::1;::::0;;;::::1;::::0;;33205:13:::1;:33:::0;;33058:80;33205:33;::::1;::::0;;33058:24:::1;33205:33:::0;;;;;::::1;;33224:13:::0;;33205:33;::::1;:::i;:::-;;33254:48;33271:13;;33286:15;33254:48;;;;;;;;:::i;:::-;;;;;;;;32858:452:::0;;;:::o;33864:178::-;25495:13;:11;:13::i;:::-;33981:5:::1;33950:13;33964;;33950:28;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:36;;;::::1;;-1:-1:-1::0;;33950:36:0;;::::1;::::0;;;::::1;::::0;;;34002:32:::1;::::0;::::1;::::0;34013:13;;;;33950:28:::1;::::0;34002:32:::1;:::i;35963:107::-:0;36014:15;36049:13;36042:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35963:107;:::o;26542:220::-;25495:13;:11;:13::i;:::-;-1:-1:-1;;;;;26627:22:0;::::1;26623:93;;26673:31;::::0;-1:-1:-1;;;26673:31:0;;26701:1:::1;26673:31;::::0;::::1;1317:51:1::0;1290:18;;26673:31:0::1;;;;;;;;26623:93;26726:28;26745:8;26726:18;:28::i;:::-;26542:220:::0;:::o;25774:166::-;25655:7;25682:6;-1:-1:-1;;;;;25682:6:0;23700:10;25834:23;25830:103;;25881:40;;-1:-1:-1;;;25881:40:0;;23700:10;25881:40;;;1317:51:1;1290:18;;25881:40:0;1171:203:1;26922:191:0;26996:16;27015:6;;-1:-1:-1;;;;;27032:17:0;;;-1:-1:-1;;;;;;27032:17:0;;;;;;27065:40;;27015:6;;;;;;;27065:40;;26996:16;27065:40;26985:128;26922:191;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:348::-;454:8;464:6;518:3;511:4;503:6;499:17;495:27;485:55;;536:1;533;526:12;485:55;-1:-1:-1;559:20:1;;602:18;591:30;;588:50;;;634:1;631;624:12;588:50;671:4;663:6;659:17;647:29;;723:3;716:4;707:6;699;695:19;691:30;688:39;685:59;;;740:1;737;730:12;685:59;402:348;;;;;:::o;755:411::-;826:6;834;887:2;875:9;866:7;862:23;858:32;855:52;;;903:1;900;893:12;855:52;943:9;930:23;976:18;968:6;965:30;962:50;;;1008:1;1005;998:12;962:50;1047:59;1098:7;1089:6;1078:9;1074:22;1047:59;:::i;:::-;1125:8;;1021:85;;-1:-1:-1;755:411:1;-1:-1:-1;;;;755:411:1:o;1379:127::-;1440:10;1435:3;1431:20;1428:1;1421:31;1471:4;1468:1;1461:15;1495:4;1492:1;1485:15;1511:922;1580:6;1633:2;1621:9;1612:7;1608:23;1604:32;1601:52;;;1649:1;1646;1639:12;1601:52;1689:9;1676:23;1718:18;1759:2;1751:6;1748:14;1745:34;;;1775:1;1772;1765:12;1745:34;1813:6;1802:9;1798:22;1788:32;;1858:7;1851:4;1847:2;1843:13;1839:27;1829:55;;1880:1;1877;1870:12;1829:55;1916:2;1903:16;1938:2;1934;1931:10;1928:36;;;1944:18;;:::i;:::-;2019:2;2013:9;1987:2;2073:13;;-1:-1:-1;;2069:22:1;;;2093:2;2065:31;2061:40;2049:53;;;2117:18;;;2137:22;;;2114:46;2111:72;;;2163:18;;:::i;:::-;2203:10;2199:2;2192:22;2238:2;2230:6;2223:18;2278:7;2273:2;2268;2264;2260:11;2256:20;2253:33;2250:53;;;2299:1;2296;2289:12;2250:53;2355:2;2350;2346;2342:11;2337:2;2329:6;2325:15;2312:46;2400:1;2378:15;;;2395:2;2374:24;2367:35;;;;-1:-1:-1;2382:6:1;1511:922;-1:-1:-1;;;;;1511:922:1:o;2672:180::-;2731:6;2784:2;2772:9;2763:7;2759:23;2755:32;2752:52;;;2800:1;2797;2790:12;2752:52;-1:-1:-1;2823:23:1;;2672:180;-1:-1:-1;2672:180:1:o;2857:423::-;2899:3;2937:5;2931:12;2964:6;2959:3;2952:19;2989:1;2999:162;3013:6;3010:1;3007:13;2999:162;;;3075:4;3131:13;;;3127:22;;3121:29;3103:11;;;3099:20;;3092:59;3028:12;2999:162;;;3003:3;3206:1;3199:4;3190:6;3185:3;3181:16;3177:27;3170:38;3269:4;3262:2;3258:7;3253:2;3245:6;3241:15;3237:29;3232:3;3228:39;3224:50;3217:57;;;2857:423;;;;:::o;3285:220::-;3434:2;3423:9;3416:21;3397:4;3454:45;3495:2;3484:9;3480:18;3472:6;3454:45;:::i;3510:546::-;3590:6;3598;3606;3659:2;3647:9;3638:7;3634:23;3630:32;3627:52;;;3675:1;3672;3665:12;3627:52;3715:9;3702:23;3748:18;3740:6;3737:30;3734:50;;;3780:1;3777;3770:12;3734:50;3819:59;3870:7;3861:6;3850:9;3846:22;3819:59;:::i;:::-;3897:8;;-1:-1:-1;3793:85:1;-1:-1:-1;;3982:2:1;3967:18;;3954:32;3995:31;3954:32;3995:31;:::i;:::-;4045:5;4035:15;;;3510:546;;;;;:::o;4253:803::-;4415:4;4444:2;4484;4473:9;4469:18;4514:2;4503:9;4496:21;4537:6;4572;4566:13;4603:6;4595;4588:22;4641:2;4630:9;4626:18;4619:25;;4703:2;4693:6;4690:1;4686:14;4675:9;4671:30;4667:39;4653:53;;4741:2;4733:6;4729:15;4762:1;4772:255;4786:6;4783:1;4780:13;4772:255;;;4879:2;4875:7;4863:9;4855:6;4851:22;4847:36;4842:3;4835:49;4907:40;4940:6;4931;4925:13;4907:40;:::i;:::-;4897:50;-1:-1:-1;5005:12:1;;;;4970:15;;;;4808:1;4801:9;4772:255;;;-1:-1:-1;5044:6:1;;4253:803;-1:-1:-1;;;;;;;4253:803:1:o;5350:273::-;5535:6;5527;5522:3;5509:33;5491:3;5561:16;;5586:13;;;5561:16;5350:273;-1:-1:-1;5350:273:1:o;6013:267::-;6102:6;6097:3;6090:19;6154:6;6147:5;6140:4;6135:3;6131:14;6118:43;-1:-1:-1;6206:1:1;6181:16;;;6199:4;6177:27;;;6170:38;;;;6262:2;6241:15;;;-1:-1:-1;;6237:29:1;6228:39;;;6224:50;;6013:267::o;6285:344::-;6472:2;6461:9;6454:21;6435:4;6492:62;6550:2;6539:9;6535:18;6527:6;6519;6492:62;:::i;:::-;6484:70;;6619:1;6615;6610:3;6606:11;6602:19;6594:6;6590:32;6585:2;6574:9;6570:18;6563:60;6285:344;;;;;;:::o;6634:328::-;6815:2;6804:9;6797:21;6778:4;6835:62;6893:2;6882:9;6878:18;6870:6;6862;6835:62;:::i;:::-;6827:70;;6947:6;6940:14;6933:22;6928:2;6917:9;6913:18;6906:50;6634:328;;;;;;:::o;6967:380::-;7046:1;7042:12;;;;7089;;;7110:61;;7164:4;7156:6;7152:17;7142:27;;7110:61;7217:2;7209:6;7206:14;7186:18;7183:38;7180:161;;7263:10;7258:3;7254:20;7251:1;7244:31;7298:4;7295:1;7288:15;7326:4;7323:1;7316:15;7180:161;;6967:380;;;:::o;7352:251::-;7422:6;7475:2;7463:9;7454:7;7450:23;7446:32;7443:52;;;7491:1;7488;7481:12;7443:52;7523:9;7517:16;7542:31;7567:5;7542:31;:::i;8043:518::-;8145:2;8140:3;8137:11;8134:421;;;8181:5;8178:1;8171:16;8225:4;8222:1;8212:18;8295:2;8283:10;8279:19;8276:1;8272:27;8266:4;8262:38;8331:4;8319:10;8316:20;8313:47;;;-1:-1:-1;8354:4:1;8313:47;8409:2;8404:3;8400:12;8397:1;8393:20;8387:4;8383:31;8373:41;;8464:81;8482:2;8475:5;8472:13;8464:81;;;8541:1;8527:16;;8508:1;8497:13;8464:81;;;8468:3;;8134:421;8043:518;;;:::o;8737:1198::-;8861:18;8856:3;8853:27;8850:53;;;8883:18;;:::i;:::-;8912:94;9002:3;8962:38;8994:4;8988:11;8962:38;:::i;:::-;8956:4;8912:94;:::i;:::-;9032:1;9057:2;9052:3;9049:11;9074:1;9069:608;;;;9721:1;9738:3;9735:93;;;-1:-1:-1;9794:19:1;;;9781:33;9735:93;-1:-1:-1;;8694:1:1;8690:11;;;8686:24;8682:29;8672:40;8718:1;8714:11;;;8669:57;9841:78;;9042:887;;9069:608;7990:1;7983:14;;;8027:4;8014:18;;-1:-1:-1;;9105:17:1;;;9220:229;9234:7;9231:1;9228:14;9220:229;;;9323:19;;;9310:33;9295:49;;9430:4;9415:20;;;;9383:1;9371:14;;;;9250:12;9220:229;;;9224:3;9477;9468:7;9465:16;9462:159;;;9601:1;9597:6;9591:3;9585;9582:1;9578:11;9574:21;9570:34;9566:39;9553:9;9548:3;9544:19;9531:33;9527:79;9519:6;9512:95;9462:159;;;9664:1;9658:3;9655:1;9651:11;9647:19;9641:4;9634:33;9042:887;;8737:1198;;;:::o
Swarm Source
ipfs://ff9298ffa7b9f3a9babfc6e0b1b82ab69cbac1cbf04da858a5ac3369c547843c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.