Source Code
Overview
ETH Balance
ETH Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 28314732 | 3 hrs ago | 0 ETH | ||||
| 28314132 | 4 hrs ago | 0 ETH | ||||
| 28312849 | 5 hrs ago | 0 ETH | ||||
| 28312118 | 5 hrs ago | 0 ETH | ||||
| 28311419 | 6 hrs ago | 0 ETH | ||||
| 28309961 | 7 hrs ago | 0 ETH | ||||
| 28305399 | 10 hrs ago | 0 ETH | ||||
| 28305399 | 10 hrs ago | 0 ETH | ||||
| 28303939 | 11 hrs ago | 0 ETH | ||||
| 28302391 | 12 hrs ago | 0 ETH | ||||
| 28302377 | 12 hrs ago | 0 ETH | ||||
| 28302361 | 12 hrs ago | 0 ETH | ||||
| 28301707 | 12 hrs ago | 0 ETH | ||||
| 28301692 | 12 hrs ago | 0 ETH | ||||
| 28301678 | 12 hrs ago | 0 ETH | ||||
| 28301663 | 12 hrs ago | 0 ETH | ||||
| 28301650 | 12 hrs ago | 0 ETH | ||||
| 28301637 | 12 hrs ago | 0 ETH | ||||
| 28301624 | 12 hrs ago | 0 ETH | ||||
| 28301610 | 12 hrs ago | 0 ETH | ||||
| 28301598 | 12 hrs ago | 0 ETH | ||||
| 28301584 | 12 hrs ago | 0 ETH | ||||
| 28300901 | 13 hrs ago | 0 ETH | ||||
| 28300901 | 13 hrs ago | 0 ETH | ||||
| 28300887 | 13 hrs ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BeefyFeeConfigurator
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at lineascan.build/ on 2023-12-08
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library AddressUpgradeable {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://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.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) 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(errorMessage);
}
}
}
// File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.2;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
* @custom:oz-retyped-from bool
*/
uint8 private _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private _initializing;
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint8 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a
* constructor.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
bool isTopLevelCall = !_initializing;
require(
(isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),
"Initializable: contract is already initialized"
);
_initialized = 1;
if (isTopLevelCall) {
_initializing = true;
}
_;
if (isTopLevelCall) {
_initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: setting the version to 255 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint8 version) {
require(!_initializing && _initialized < version, "Initializable: contract is already initialized");
_initialized = version;
_initializing = true;
_;
_initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
require(_initializing, "Initializable: contract is not initializing");
_;
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
require(!_initializing, "Initializable: contract is initializing");
if (_initialized != type(uint8).max) {
_initialized = type(uint8).max;
emit Initialized(type(uint8).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint8) {
return _initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _initializing;
}
}
// File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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 ContextUpgradeable is Initializable {
function __Context_init() internal onlyInitializing {
}
function __Context_init_unchained() internal onlyInitializing {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[50] private __gap;
}
// File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @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.
*
* By default, the owner account will be the one that deploys the contract. 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 OwnableUpgradeable is Initializable, ContextUpgradeable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
function __Ownable_init() internal onlyInitializing {
__Ownable_init_unchained();
}
function __Ownable_init_unchained() internal onlyInitializing {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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);
}
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[49] private __gap;
}
// File: contracts/BIFI/infra/BeefyFeeConfigurator.sol
pragma solidity ^0.8.0;
contract BeefyFeeConfigurator is OwnableUpgradeable {
struct FeeCategory {
uint256 total; // total fee charged on each harvest
uint256 beefy; // split of total fee going to beefy fee batcher
uint256 call; // split of total fee going to harvest caller
uint256 strategist; // split of total fee going to developer of the strategy
string label; // description of the type of fee category
bool active; // on/off switch for fee category
}
address public keeper;
uint256 public totalLimit;
uint256 constant DIVISOR = 1 ether;
mapping(address => uint256) public stratFeeId;
mapping(uint256 => FeeCategory) internal feeCategory;
event SetStratFeeId(address indexed strategy, uint256 indexed id);
event SetFeeCategory(
uint256 indexed id,
uint256 total,
uint256 beefy,
uint256 call,
uint256 strategist,
string label,
bool active
);
event Pause(uint256 indexed id);
event Unpause(uint256 indexed id);
event SetKeeper(address indexed keeper);
function initialize(
address _keeper,
uint256 _totalLimit
) public initializer {
__Ownable_init();
keeper = _keeper;
totalLimit = _totalLimit;
}
// checks that caller is either owner or keeper
modifier onlyManager() {
require(msg.sender == owner() || msg.sender == keeper, "!manager");
_;
}
// fetch fees for a strategy
function getFees(address _strategy) external view returns (FeeCategory memory) {
return getFeeCategory(stratFeeId[_strategy], false);
}
// fetch fees for a strategy, _adjust option to view fees as % of total harvest instead of % of total fee
function getFees(address _strategy, bool _adjust) external view returns (FeeCategory memory) {
return getFeeCategory(stratFeeId[_strategy], _adjust);
}
// fetch fee category for an id if active, otherwise return default category
// _adjust == true: view fees as % of total harvest instead of % of total fee
function getFeeCategory(uint256 _id, bool _adjust) public view returns (FeeCategory memory fees) {
uint256 id = feeCategory[_id].active ? _id : 0;
fees = feeCategory[id];
if (_adjust) {
uint256 _totalFee = fees.total;
fees.beefy = fees.beefy * _totalFee / DIVISOR;
fees.call = fees.call * _totalFee / DIVISOR;
fees.strategist = fees.strategist * _totalFee / DIVISOR;
}
}
// set a fee category id for a strategy that calls this function directly
function setStratFeeId(uint256 _feeId) external {
_setStratFeeId(msg.sender, _feeId);
}
// set a fee category id for a strategy by a manager
function setStratFeeId(address _strategy, uint256 _feeId) external onlyManager {
_setStratFeeId(_strategy, _feeId);
}
// set fee category ids for multiple strategies at once by a manager
function setStratFeeId(address[] memory _strategies, uint256[] memory _feeIds) external onlyManager {
uint256 stratLength = _strategies.length;
for (uint256 i = 0; i < stratLength; i++) {
_setStratFeeId(_strategies[i], _feeIds[i]);
}
}
// internally set a fee category id for a strategy
function _setStratFeeId(address _strategy, uint256 _feeId) internal {
stratFeeId[_strategy] = _feeId;
emit SetStratFeeId(_strategy, _feeId);
}
// set values for a fee category using the relative split for call and strategist
// i.e. call = 0.01 ether == 1% of total fee
// _adjust == true: input call and strat fee as % of total harvest
function setFeeCategory(
uint256 _id,
uint256 _total,
uint256 _call,
uint256 _strategist,
string memory _label,
bool _active,
bool _adjust
) external onlyOwner {
require(_total <= totalLimit, ">totalLimit");
if (_adjust) {
_call = _call * DIVISOR / _total;
_strategist = _strategist * DIVISOR / _total;
}
uint256 beefy = DIVISOR - _call - _strategist;
FeeCategory memory category = FeeCategory(_total, beefy, _call, _strategist, _label, _active);
feeCategory[_id] = category;
emit SetFeeCategory(_id, _total, beefy, _call, _strategist, _label, _active);
}
// deactivate a fee category making all strategies with this fee id revert to default fees
function pause(uint256 _id) external onlyManager {
feeCategory[_id].active = false;
emit Pause(_id);
}
// reactivate a fee category
function unpause(uint256 _id) external onlyManager {
feeCategory[_id].active = true;
emit Unpause(_id);
}
// change keeper
function setKeeper(address _keeper) external onlyManager {
keeper = _keeper;
emit SetKeeper(_keeper);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","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":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beefy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"call","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"strategist","type":"uint256"},{"indexed":false,"internalType":"string","name":"label","type":"string"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"SetFeeCategory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"}],"name":"SetKeeper","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"strategy","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"SetStratFeeId","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Unpause","type":"event"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_adjust","type":"bool"}],"name":"getFeeCategory","outputs":[{"components":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"beefy","type":"uint256"},{"internalType":"uint256","name":"call","type":"uint256"},{"internalType":"uint256","name":"strategist","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct BeefyFeeConfigurator.FeeCategory","name":"fees","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"bool","name":"_adjust","type":"bool"}],"name":"getFees","outputs":[{"components":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"beefy","type":"uint256"},{"internalType":"uint256","name":"call","type":"uint256"},{"internalType":"uint256","name":"strategist","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct BeefyFeeConfigurator.FeeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"}],"name":"getFees","outputs":[{"components":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"beefy","type":"uint256"},{"internalType":"uint256","name":"call","type":"uint256"},{"internalType":"uint256","name":"strategist","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct BeefyFeeConfigurator.FeeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"},{"internalType":"uint256","name":"_totalLimit","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_call","type":"uint256"},{"internalType":"uint256","name":"_strategist","type":"uint256"},{"internalType":"string","name":"_label","type":"string"},{"internalType":"bool","name":"_active","type":"bool"},{"internalType":"bool","name":"_adjust","type":"bool"}],"name":"setFeeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_strategies","type":"address[]"},{"internalType":"uint256[]","name":"_feeIds","type":"uint256[]"}],"name":"setStratFeeId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeId","type":"uint256"}],"name":"setStratFeeId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"uint256","name":"_feeId","type":"uint256"}],"name":"setStratFeeId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stratFeeId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b506112a3806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80639af608c9116100a2578063cd6dc68711610071578063cd6dc68714610217578063cf1046221461022a578063e1bcdad91461024a578063f2fde38b1461025d578063fabc1cbc1461027057600080fd5b80639af608c9146101c7578063a36298c7146101da578063a537633c146101f1578063aced16611461020457600080fd5b80634d7c76e5116100de5780634d7c76e514610174578063715018a614610187578063748747e61461018f5780638da5cb5b146101a257600080fd5b806306fced9a146101105780630fbc399414610139578063136439dd1461014e5780633e55f93214610161575b600080fd5b61012361011e366004610c1e565b610283565b6040516101309190610c97565b60405180910390f35b61014c610147366004610dc9565b6102b7565b005b61014c61015c366004610e89565b610360565b61014c61016f366004610e89565b6103e2565b61014c610182366004610ea2565b6103ef565b61014c61058c565b61014c61019d366004610f7f565b6105a0565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610130565b6101236101d5366004610f7f565b610629565b6101e360665481565b604051908152602001610130565b6101236101ff366004610f9a565b61064f565b6065546101af906001600160a01b031681565b61014c610225366004610fbd565b6107f2565b6101e3610238366004610f7f565b60676020526000908152604090205481565b61014c610258366004610fbd565b610925565b61014c61026b366004610f7f565b610972565b61014c61027e366004610e89565b6109e8565b61028b610bba565b6001600160a01b0383166000908152606760205260409020546102ae908361064f565b90505b92915050565b6033546001600160a01b03163314806102da57506065546001600160a01b031633145b6102ff5760405162461bcd60e51b81526004016102f690610fe7565b60405180910390fd5b815160005b8181101561035a5761034884828151811061032157610321611009565b602002602001015184838151811061033b5761033b611009565b6020026020010151610a6d565b8061035281611035565b915050610304565b50505050565b6033546001600160a01b031633148061038357506065546001600160a01b031633145b61039f5760405162461bcd60e51b81526004016102f690610fe7565b600081815260686020526040808220600501805460ff191690555182917f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d91a250565b6103ec3382610a6d565b50565b6103f7610ab4565b6066548611156104375760405162461bcd60e51b815260206004820152600b60248201526a0f9d1bdd185b131a5b5a5d60aa1b60448201526064016102f6565b801561047c5785610450670de0b6b3a76400008761104e565b61045a9190611065565b94508561046f670de0b6b3a76400008661104e565b6104799190611065565b93505b60008461049187670de0b6b3a7640000611087565b61049b9190611087565b905060006040518060c00160405280898152602001838152602001888152602001878152602001868152602001851515815250905080606860008b81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040190816105219190611122565b5060a091909101516005909101805460ff191691151591909117905560405189907f8bd32089ef8cf666951ba8557b00491743a2b2cb9697111f360a4f19390fe7e190610579908b9086908c908c908c908c906111e2565b60405180910390a2505050505050505050565b610594610ab4565b61059e6000610b0e565b565b6033546001600160a01b03163314806105c357506065546001600160a01b031633145b6105df5760405162461bcd60e51b81526004016102f690610fe7565b606580546001600160a01b0319166001600160a01b0383169081179091556040517fefb5cfa1a8690c124332ab93324539c5c9c4be03f28aeb8be86f2d8a0c9fb99b90600090a250565b610631610bba565b6001600160a01b0382166000908152606760205260408120546102b1915b610657610bba565b60008381526068602052604081206005015460ff16610677576000610679565b835b9050606860008281526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820180546106d19061109a565b80601f01602080910402602001604051908101604052809291908181526020018280546106fd9061109a565b801561074a5780601f1061071f5761010080835404028352916020019161074a565b820191906000526020600020905b81548152906001019060200180831161072d57829003601f168201915b50505091835250506005919091015460ff161515602090910152915082156107eb5781516020830151670de0b6b3a76400009061078890839061104e565b6107929190611065565b60208401526040830151670de0b6b3a7640000906107b190839061104e565b6107bb9190611065565b60408401526060830151670de0b6b3a7640000906107da90839061104e565b6107e49190611065565b6060840152505b5092915050565b600054610100900460ff16158080156108125750600054600160ff909116105b8061082c5750303b15801561082c575060005460ff166001145b61088f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102f6565b6000805460ff1916600117905580156108b2576000805461ff0019166101001790555b6108ba610b60565b606580546001600160a01b0319166001600160a01b03851617905560668290558015610920576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6033546001600160a01b031633148061094857506065546001600160a01b031633145b6109645760405162461bcd60e51b81526004016102f690610fe7565b61096e8282610a6d565b5050565b61097a610ab4565b6001600160a01b0381166109df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102f6565b6103ec81610b0e565b6033546001600160a01b0316331480610a0b57506065546001600160a01b031633145b610a275760405162461bcd60e51b81526004016102f690610fe7565b600081815260686020526040808220600501805460ff191660011790555182917faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab791a250565b6001600160a01b038216600081815260676020526040808220849055518392917f055b48a7f28272213f8d2dea6936149129fe08c4874c4a8e434d82e4f272e84891a35050565b6033546001600160a01b0316331461059e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610b875760405162461bcd60e51b81526004016102f690611222565b61059e600054610100900460ff16610bb15760405162461bcd60e51b81526004016102f690611222565b61059e33610b0e565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001606081526020016000151581525090565b80356001600160a01b0381168114610c0957600080fd5b919050565b80358015158114610c0957600080fd5b60008060408385031215610c3157600080fd5b610c3a83610bf2565b9150610c4860208401610c0e565b90509250929050565b6000815180845260005b81811015610c7757602081850181015186830182015201610c5b565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160c060a0840152610cdb60e0840182610c51565b905060a0840151151560c08401528091505092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d3257610d32610cf3565b604052919050565b600067ffffffffffffffff821115610d5457610d54610cf3565b5060051b60200190565b600082601f830112610d6f57600080fd5b81356020610d84610d7f83610d3a565b610d09565b82815260059290921b84018101918181019086841115610da357600080fd5b8286015b84811015610dbe5780358352918301918301610da7565b509695505050505050565b60008060408385031215610ddc57600080fd5b823567ffffffffffffffff80821115610df457600080fd5b818501915085601f830112610e0857600080fd5b81356020610e18610d7f83610d3a565b82815260059290921b84018101918181019089841115610e3757600080fd5b948201945b83861015610e5c57610e4d86610bf2565b82529482019490820190610e3c565b96505086013592505080821115610e7257600080fd5b50610e7f85828601610d5e565b9150509250929050565b600060208284031215610e9b57600080fd5b5035919050565b600080600080600080600060e0888a031215610ebd57600080fd5b8735965060208089013596506040890135955060608901359450608089013567ffffffffffffffff80821115610ef257600080fd5b818b0191508b601f830112610f0657600080fd5b813581811115610f1857610f18610cf3565b610f2a601f8201601f19168501610d09565b91508082528c84828501011115610f4057600080fd5b8084840185840137600084828401015250809550505050610f6360a08901610c0e565b9150610f7160c08901610c0e565b905092959891949750929550565b600060208284031215610f9157600080fd5b6102ae82610bf2565b60008060408385031215610fad57600080fd5b82359150610c4860208401610c0e565b60008060408385031215610fd057600080fd5b610fd983610bf2565b946020939093013593505050565b60208082526008908201526710b6b0b730b3b2b960c11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110475761104761101f565b5060010190565b80820281158282048414176102b1576102b161101f565b60008261108257634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156102b1576102b161101f565b600181811c908216806110ae57607f821691505b6020821081036110ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561092057600081815260208120601f850160051c810160208610156110fb5750805b601f850160051c820191505b8181101561111a57828155600101611107565b505050505050565b815167ffffffffffffffff81111561113c5761113c610cf3565b6111508161114a845461109a565b846110d4565b602080601f831160018114611185576000841561116d5750858301515b600019600386901b1c1916600185901b17855561111a565b600085815260208120601f198616915b828110156111b457888601518255948401946001909101908401611195565b50858210156111d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b86815285602082015284604082015283606082015260c06080820152600061120d60c0830185610c51565b905082151560a0830152979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea26469706673582212209e42285e7654b74d24c31a9c992ff76f066c15a973fd5772ab0be37f77c3d16b64736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80639af608c9116100a2578063cd6dc68711610071578063cd6dc68714610217578063cf1046221461022a578063e1bcdad91461024a578063f2fde38b1461025d578063fabc1cbc1461027057600080fd5b80639af608c9146101c7578063a36298c7146101da578063a537633c146101f1578063aced16611461020457600080fd5b80634d7c76e5116100de5780634d7c76e514610174578063715018a614610187578063748747e61461018f5780638da5cb5b146101a257600080fd5b806306fced9a146101105780630fbc399414610139578063136439dd1461014e5780633e55f93214610161575b600080fd5b61012361011e366004610c1e565b610283565b6040516101309190610c97565b60405180910390f35b61014c610147366004610dc9565b6102b7565b005b61014c61015c366004610e89565b610360565b61014c61016f366004610e89565b6103e2565b61014c610182366004610ea2565b6103ef565b61014c61058c565b61014c61019d366004610f7f565b6105a0565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610130565b6101236101d5366004610f7f565b610629565b6101e360665481565b604051908152602001610130565b6101236101ff366004610f9a565b61064f565b6065546101af906001600160a01b031681565b61014c610225366004610fbd565b6107f2565b6101e3610238366004610f7f565b60676020526000908152604090205481565b61014c610258366004610fbd565b610925565b61014c61026b366004610f7f565b610972565b61014c61027e366004610e89565b6109e8565b61028b610bba565b6001600160a01b0383166000908152606760205260409020546102ae908361064f565b90505b92915050565b6033546001600160a01b03163314806102da57506065546001600160a01b031633145b6102ff5760405162461bcd60e51b81526004016102f690610fe7565b60405180910390fd5b815160005b8181101561035a5761034884828151811061032157610321611009565b602002602001015184838151811061033b5761033b611009565b6020026020010151610a6d565b8061035281611035565b915050610304565b50505050565b6033546001600160a01b031633148061038357506065546001600160a01b031633145b61039f5760405162461bcd60e51b81526004016102f690610fe7565b600081815260686020526040808220600501805460ff191690555182917f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d91a250565b6103ec3382610a6d565b50565b6103f7610ab4565b6066548611156104375760405162461bcd60e51b815260206004820152600b60248201526a0f9d1bdd185b131a5b5a5d60aa1b60448201526064016102f6565b801561047c5785610450670de0b6b3a76400008761104e565b61045a9190611065565b94508561046f670de0b6b3a76400008661104e565b6104799190611065565b93505b60008461049187670de0b6b3a7640000611087565b61049b9190611087565b905060006040518060c00160405280898152602001838152602001888152602001878152602001868152602001851515815250905080606860008b81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040190816105219190611122565b5060a091909101516005909101805460ff191691151591909117905560405189907f8bd32089ef8cf666951ba8557b00491743a2b2cb9697111f360a4f19390fe7e190610579908b9086908c908c908c908c906111e2565b60405180910390a2505050505050505050565b610594610ab4565b61059e6000610b0e565b565b6033546001600160a01b03163314806105c357506065546001600160a01b031633145b6105df5760405162461bcd60e51b81526004016102f690610fe7565b606580546001600160a01b0319166001600160a01b0383169081179091556040517fefb5cfa1a8690c124332ab93324539c5c9c4be03f28aeb8be86f2d8a0c9fb99b90600090a250565b610631610bba565b6001600160a01b0382166000908152606760205260408120546102b1915b610657610bba565b60008381526068602052604081206005015460ff16610677576000610679565b835b9050606860008281526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820180546106d19061109a565b80601f01602080910402602001604051908101604052809291908181526020018280546106fd9061109a565b801561074a5780601f1061071f5761010080835404028352916020019161074a565b820191906000526020600020905b81548152906001019060200180831161072d57829003601f168201915b50505091835250506005919091015460ff161515602090910152915082156107eb5781516020830151670de0b6b3a76400009061078890839061104e565b6107929190611065565b60208401526040830151670de0b6b3a7640000906107b190839061104e565b6107bb9190611065565b60408401526060830151670de0b6b3a7640000906107da90839061104e565b6107e49190611065565b6060840152505b5092915050565b600054610100900460ff16158080156108125750600054600160ff909116105b8061082c5750303b15801561082c575060005460ff166001145b61088f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102f6565b6000805460ff1916600117905580156108b2576000805461ff0019166101001790555b6108ba610b60565b606580546001600160a01b0319166001600160a01b03851617905560668290558015610920576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6033546001600160a01b031633148061094857506065546001600160a01b031633145b6109645760405162461bcd60e51b81526004016102f690610fe7565b61096e8282610a6d565b5050565b61097a610ab4565b6001600160a01b0381166109df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102f6565b6103ec81610b0e565b6033546001600160a01b0316331480610a0b57506065546001600160a01b031633145b610a275760405162461bcd60e51b81526004016102f690610fe7565b600081815260686020526040808220600501805460ff191660011790555182917faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab791a250565b6001600160a01b038216600081815260676020526040808220849055518392917f055b48a7f28272213f8d2dea6936149129fe08c4874c4a8e434d82e4f272e84891a35050565b6033546001600160a01b0316331461059e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610b875760405162461bcd60e51b81526004016102f690611222565b61059e600054610100900460ff16610bb15760405162461bcd60e51b81526004016102f690611222565b61059e33610b0e565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001606081526020016000151581525090565b80356001600160a01b0381168114610c0957600080fd5b919050565b80358015158114610c0957600080fd5b60008060408385031215610c3157600080fd5b610c3a83610bf2565b9150610c4860208401610c0e565b90509250929050565b6000815180845260005b81811015610c7757602081850181015186830182015201610c5b565b506000602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160c060a0840152610cdb60e0840182610c51565b905060a0840151151560c08401528091505092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d3257610d32610cf3565b604052919050565b600067ffffffffffffffff821115610d5457610d54610cf3565b5060051b60200190565b600082601f830112610d6f57600080fd5b81356020610d84610d7f83610d3a565b610d09565b82815260059290921b84018101918181019086841115610da357600080fd5b8286015b84811015610dbe5780358352918301918301610da7565b509695505050505050565b60008060408385031215610ddc57600080fd5b823567ffffffffffffffff80821115610df457600080fd5b818501915085601f830112610e0857600080fd5b81356020610e18610d7f83610d3a565b82815260059290921b84018101918181019089841115610e3757600080fd5b948201945b83861015610e5c57610e4d86610bf2565b82529482019490820190610e3c565b96505086013592505080821115610e7257600080fd5b50610e7f85828601610d5e565b9150509250929050565b600060208284031215610e9b57600080fd5b5035919050565b600080600080600080600060e0888a031215610ebd57600080fd5b8735965060208089013596506040890135955060608901359450608089013567ffffffffffffffff80821115610ef257600080fd5b818b0191508b601f830112610f0657600080fd5b813581811115610f1857610f18610cf3565b610f2a601f8201601f19168501610d09565b91508082528c84828501011115610f4057600080fd5b8084840185840137600084828401015250809550505050610f6360a08901610c0e565b9150610f7160c08901610c0e565b905092959891949750929550565b600060208284031215610f9157600080fd5b6102ae82610bf2565b60008060408385031215610fad57600080fd5b82359150610c4860208401610c0e565b60008060408385031215610fd057600080fd5b610fd983610bf2565b946020939093013593505050565b60208082526008908201526710b6b0b730b3b2b960c11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110475761104761101f565b5060010190565b80820281158282048414176102b1576102b161101f565b60008261108257634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156102b1576102b161101f565b600181811c908216806110ae57607f821691505b6020821081036110ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561092057600081815260208120601f850160051c810160208610156110fb5750805b601f850160051c820191505b8181101561111a57828155600101611107565b505050505050565b815167ffffffffffffffff81111561113c5761113c610cf3565b6111508161114a845461109a565b846110d4565b602080601f831160018114611185576000841561116d5750858301515b600019600386901b1c1916600185901b17855561111a565b600085815260208120601f198616915b828110156111b457888601518255948401946001909101908401611195565b50858210156111d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b86815285602082015284604082015283606082015260c06080820152600061120d60c0830185610c51565b905082151560a0830152979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea26469706673582212209e42285e7654b74d24c31a9c992ff76f066c15a973fd5772ab0be37f77c3d16b64736f6c63430008130033
Deployed Bytecode Sourcemap
21177:5125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23031:165;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24299:280;;;;;;:::i;:::-;;:::i;:::-;;25848:125;;;;;;:::i;:::-;;:::i;23919:101::-;;;;;;:::i;:::-;;:::i;25025:719::-;;;;;;:::i;:::-;;:::i;19975:103::-;;;:::i;26173:126::-;;;;;;:::i;:::-;;:::i;19334:87::-;19407:6;;-1:-1:-1;;;;;19407:6:0;19334:87;;;-1:-1:-1;;;;;5880:32:1;;;5862:51;;5850:2;5835:18;19334:87:0;5716:203:1;22763:149:0;;;;;;:::i;:::-;;:::i;21745:25::-;;;;;;;;;6070::1;;;6058:2;6043:18;21745:25:0;5924:177:1;23369:463:0;;;;;;:::i;:::-;;:::i;21717:21::-;;;;;-1:-1:-1;;;;;21717:21:0;;;22339:201;;;;;;:::i;:::-;;:::i;21820:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;24086:131;;;;;;:::i;:::-;;:::i;20233:201::-;;;;;;:::i;:::-;;:::i;26015:128::-;;;;;;:::i;:::-;;:::i;23031:165::-;23104:18;;:::i;:::-;-1:-1:-1;;;;;23157:21:0;;;;;;:10;:21;;;;;;23142:46;;23180:7;23142:14;:46::i;:::-;23135:53;;23031:165;;;;;:::o;24299:280::-;19407:6;;-1:-1:-1;;;;;19407:6:0;22643:10;:21;;:45;;-1:-1:-1;22682:6:0;;-1:-1:-1;;;;;22682:6:0;22668:10;:20;22643:45;22635:66;;;;-1:-1:-1;;;22635:66:0;;;;;;;:::i;:::-;;;;;;;;;24432:18;;24410:19:::1;24461:111;24485:11;24481:1;:15;24461:111;;;24518:42;24533:11;24545:1;24533:14;;;;;;;;:::i;:::-;;;;;;;24549:7;24557:1;24549:10;;;;;;;;:::i;:::-;;;;;;;24518:14;:42::i;:::-;24498:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24461:111;;;;24399:180;24299:280:::0;;:::o;25848:125::-;19407:6;;-1:-1:-1;;;;;19407:6:0;22643:10;:21;;:45;;-1:-1:-1;22682:6:0;;-1:-1:-1;;;;;22682:6:0;22668:10;:20;22643:45;22635:66;;;;-1:-1:-1;;;22635:66:0;;;;;;;:::i;:::-;25934:5:::1;25908:16:::0;;;:11:::1;:16;::::0;;;;;:23:::1;;:31:::0;;-1:-1:-1;;25908:31:0::1;::::0;;25955:10;25920:3;;25955:10:::1;::::0;::::1;25848:125:::0;:::o;23919:101::-;23978:34;23993:10;24005:6;23978:14;:34::i;:::-;23919:101;:::o;25025:719::-;19220:13;:11;:13::i;:::-;25282:10:::1;;25272:6;:20;;25264:44;;;::::0;-1:-1:-1;;;25264:44:0;;7560:2:1;25264:44:0::1;::::0;::::1;7542:21:1::0;7599:2;7579:18;;;7572:30;-1:-1:-1;;;7618:18:1;;;7611:41;7669:18;;25264:44:0::1;7358:335:1::0;25264:44:0::1;25323:7;25319:131;;;25373:6:::0;25355:15:::1;21804:7;25355:5:::0;:15:::1;:::i;:::-;:24;;;;:::i;:::-;25347:32:::0;-1:-1:-1;25432:6:0;25408:21:::1;21804:7;25408:11:::0;:21:::1;:::i;:::-;:30;;;;:::i;:::-;25394:44;;25319:131;25460:13;25494:11:::0;25476:15:::1;25486:5:::0;21804:7:::1;25476:15;:::i;:::-;:29;;;;:::i;:::-;25460:45;;25518:27;25548:63;;;;;;;;25560:6;25548:63;;;;25568:5;25548:63;;;;25575:5;25548:63;;;;25582:11;25548:63;;;;25595:6;25548:63;;;;25603:7;25548:63;;;;::::0;25518:93:::1;;25641:8;25622:11;:16;25634:3;25622:16;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25622:27:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;25622:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25665:71:::1;::::0;25680:3;;25665:71:::1;::::0;::::1;::::0;25685:6;;25693:5;;25700;;25707:11;;25720:6;;25728:7;;25665:71:::1;:::i;:::-;;;;;;;;25253:491;;25025:719:::0;;;;;;;:::o;19975:103::-;19220:13;:11;:13::i;:::-;20040:30:::1;20067:1;20040:18;:30::i;:::-;19975:103::o:0;26173:126::-;19407:6;;-1:-1:-1;;;;;19407:6:0;22643:10;:21;;:45;;-1:-1:-1;22682:6:0;;-1:-1:-1;;;;;22682:6:0;22668:10;:20;22643:45;22635:66;;;;-1:-1:-1;;;22635:66:0;;;;;;;:::i;:::-;26241:6:::1;:16:::0;;-1:-1:-1;;;;;;26241:16:0::1;-1:-1:-1::0;;;;;26241:16:0;::::1;::::0;;::::1;::::0;;;26273:18:::1;::::0;::::1;::::0;-1:-1:-1;;26273:18:0::1;26173:126:::0;:::o;22763:149::-;22822:18;;:::i;:::-;-1:-1:-1;;;;;22875:21:0;;;;;;:10;:21;;;;;;22860:44;;23369:463;23441:23;;:::i;:::-;23477:10;23490:16;;;:11;:16;;;;;:23;;;;;:33;;23522:1;23490:33;;;23516:3;23490:33;23477:46;;23541:11;:15;23553:2;23541:15;;;;;;;;;;;23534:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23534:22:0;;;-1:-1:-1;;23534:22:0;;;;;;;;;;;;;;;;-1:-1:-1;23567:258:0;;;;23615:10;;23653;;;;21804:7;;23653:22;;23615:10;;23653:22;:::i;:::-;:32;;;;:::i;:::-;23640:10;;;:45;23712:9;;;;21804:7;;23712:21;;23724:9;;23712:21;:::i;:::-;:31;;;;:::i;:::-;23700:9;;;:43;23776:15;;;;21804:7;;23776:27;;23794:9;;23776:27;:::i;:::-;:37;;;;:::i;:::-;23758:15;;;:55;-1:-1:-1;23567:258:0;23466:366;23369:463;;;;:::o;22339:201::-;13058:19;13081:13;;;;;;13080:14;;13128:34;;;;-1:-1:-1;13146:12:0;;13161:1;13146:12;;;;:16;13128:34;13127:108;;;-1:-1:-1;13207:4:0;1834:19;:23;;;13168:66;;-1:-1:-1;13217:12:0;;;;;:17;13168:66;13105:204;;;;-1:-1:-1;;;13105:204:0;;11611:2:1;13105:204:0;;;11593:21:1;11650:2;11630:18;;;11623:30;11689:34;11669:18;;;11662:62;-1:-1:-1;;;11740:18:1;;;11733:44;11794:19;;13105:204:0;11409:410:1;13105:204:0;13320:12;:16;;-1:-1:-1;;13320:16:0;13335:1;13320:16;;;13347:67;;;;13382:13;:20;;-1:-1:-1;;13382:20:0;;;;;13347:67;22452:16:::1;:14;:16::i;:::-;22481:6;:16:::0;;-1:-1:-1;;;;;;22481:16:0::1;-1:-1:-1::0;;;;;22481:16:0;::::1;;::::0;;22508:10:::1;:24:::0;;;13436:102;;;;13487:5;13471:21;;-1:-1:-1;;13471:21:0;;;13512:14;;-1:-1:-1;11976:36:1;;13512:14:0;;11964:2:1;11949:18;13512:14:0;;;;;;;13436:102;13047:498;22339:201;;:::o;24086:131::-;19407:6;;-1:-1:-1;;;;;19407:6:0;22643:10;:21;;:45;;-1:-1:-1;22682:6:0;;-1:-1:-1;;;;;22682:6:0;22668:10;:20;22643:45;22635:66;;;;-1:-1:-1;;;22635:66:0;;;;;;;:::i;:::-;24176:33:::1;24191:9;24202:6;24176:14;:33::i;:::-;24086:131:::0;;:::o;20233:201::-;19220:13;:11;:13::i;:::-;-1:-1:-1;;;;;20322:22:0;::::1;20314:73;;;::::0;-1:-1:-1;;;20314:73:0;;12225:2:1;20314:73:0::1;::::0;::::1;12207:21:1::0;12264:2;12244:18;;;12237:30;12303:34;12283:18;;;12276:62;-1:-1:-1;;;12354:18:1;;;12347:36;12400:19;;20314:73:0::1;12023:402:1::0;20314:73:0::1;20398:28;20417:8;20398:18;:28::i;26015:128::-:0;19407:6;;-1:-1:-1;;;;;19407:6:0;22643:10;:21;;:45;;-1:-1:-1;22682:6:0;;-1:-1:-1;;;;;22682:6:0;22668:10;:20;22643:45;22635:66;;;;-1:-1:-1;;;22635:66:0;;;;;;;:::i;:::-;26077:16:::1;::::0;;;:11:::1;:16;::::0;;;;;:23:::1;;:30:::0;;-1:-1:-1;;26077:30:0::1;26103:4;26077:30;::::0;;26123:12;26089:3;;26123:12:::1;::::0;::::1;26015:128:::0;:::o;24643:165::-;-1:-1:-1;;;;;24722:21:0;;;;;;:10;:21;;;;;;:30;;;24768:32;24746:6;;24722:21;24768:32;;;24643:165;;:::o;19499:132::-;19407:6;;-1:-1:-1;;;;;19407:6:0;17456:10;19563:23;19555:68;;;;-1:-1:-1;;;19555:68:0;;12632:2:1;19555:68:0;;;12614:21:1;;;12651:18;;;12644:30;12710:34;12690:18;;;12683:62;12762:18;;19555:68:0;12430:356:1;20594:191:0;20687:6;;;-1:-1:-1;;;;;20704:17:0;;;-1:-1:-1;;;;;;20704:17:0;;;;;;;20737:40;;20687:6;;;20704:17;20687:6;;20737:40;;20668:16;;20737:40;20657:128;20594:191;:::o;18877:97::-;15201:13;;;;;;;15193:69;;;;-1:-1:-1;;;15193:69:0;;;;;;;:::i;:::-;18940:26:::1;15201:13:::0;;;;;;;15193:69;;;;-1:-1:-1;;;15193:69:0;;;;;;;:::i;:::-;19055:32:::1;17456:10:::0;19055:18:::1;:32::i;-1:-1:-1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:254;422:6;430;483:2;471:9;462:7;458:23;454:32;451:52;;;499:1;496;489:12;451:52;522:29;541:9;522:29;:::i;:::-;512:39;;570:35;601:2;590:9;586:18;570:35;:::i;:::-;560:45;;357:254;;;;;:::o;616:423::-;658:3;696:5;690:12;723:6;718:3;711:19;748:1;758:162;772:6;769:1;766:13;758:162;;;834:4;890:13;;;886:22;;880:29;862:11;;;858:20;;851:59;787:12;758:162;;;762:3;965:1;958:4;949:6;944:3;940:16;936:27;929:38;1028:4;1021:2;1017:7;1012:2;1004:6;1000:15;996:29;991:3;987:39;983:50;976:57;;;616:423;;;;:::o;1044:692::-;1229:2;1218:9;1211:21;1274:6;1268:13;1263:2;1252:9;1248:18;1241:41;1336:2;1328:6;1324:15;1318:22;1313:2;1302:9;1298:18;1291:50;1395:2;1387:6;1383:15;1377:22;1372:2;1361:9;1357:18;1350:50;1455:2;1447:6;1443:15;1437:22;1431:3;1420:9;1416:19;1409:51;1192:4;1507:3;1499:6;1495:16;1489:23;1549:4;1543:3;1532:9;1528:19;1521:33;1577:52;1624:3;1613:9;1609:19;1595:12;1577:52;:::i;:::-;1563:66;;1699:3;1691:6;1687:16;1681:23;1674:31;1667:39;1660:4;1649:9;1645:20;1638:69;1724:6;1716:14;;;1044:692;;;;:::o;1741:127::-;1802:10;1797:3;1793:20;1790:1;1783:31;1833:4;1830:1;1823:15;1857:4;1854:1;1847:15;1873:275;1944:2;1938:9;2009:2;1990:13;;-1:-1:-1;;1986:27:1;1974:40;;2044:18;2029:34;;2065:22;;;2026:62;2023:88;;;2091:18;;:::i;:::-;2127:2;2120:22;1873:275;;-1:-1:-1;1873:275:1:o;2153:183::-;2213:4;2246:18;2238:6;2235:30;2232:56;;;2268:18;;:::i;:::-;-1:-1:-1;2313:1:1;2309:14;2325:4;2305:25;;2153:183::o;2341:662::-;2395:5;2448:3;2441:4;2433:6;2429:17;2425:27;2415:55;;2466:1;2463;2456:12;2415:55;2502:6;2489:20;2528:4;2552:60;2568:43;2608:2;2568:43;:::i;:::-;2552:60;:::i;:::-;2646:15;;;2732:1;2728:10;;;;2716:23;;2712:32;;;2677:12;;;;2756:15;;;2753:35;;;2784:1;2781;2774:12;2753:35;2820:2;2812:6;2808:15;2832:142;2848:6;2843:3;2840:15;2832:142;;;2914:17;;2902:30;;2952:12;;;;2865;;2832:142;;;-1:-1:-1;2992:5:1;2341:662;-1:-1:-1;;;;;;2341:662:1:o;3008:1146::-;3126:6;3134;3187:2;3175:9;3166:7;3162:23;3158:32;3155:52;;;3203:1;3200;3193:12;3155:52;3243:9;3230:23;3272:18;3313:2;3305:6;3302:14;3299:34;;;3329:1;3326;3319:12;3299:34;3367:6;3356:9;3352:22;3342:32;;3412:7;3405:4;3401:2;3397:13;3393:27;3383:55;;3434:1;3431;3424:12;3383:55;3470:2;3457:16;3492:4;3516:60;3532:43;3572:2;3532:43;:::i;3516:60::-;3610:15;;;3692:1;3688:10;;;;3680:19;;3676:28;;;3641:12;;;;3716:19;;;3713:39;;;3748:1;3745;3738:12;3713:39;3772:11;;;;3792:148;3808:6;3803:3;3800:15;3792:148;;;3874:23;3893:3;3874:23;:::i;:::-;3862:36;;3825:12;;;;3918;;;;3792:148;;;3959:5;-1:-1:-1;;4002:18:1;;3989:32;;-1:-1:-1;;4033:16:1;;;4030:36;;;4062:1;4059;4052:12;4030:36;;4085:63;4140:7;4129:8;4118:9;4114:24;4085:63;:::i;:::-;4075:73;;;3008:1146;;;;;:::o;4159:180::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;-1:-1:-1;4310:23:1;;4159:180;-1:-1:-1;4159:180:1:o;4344:1176::-;4461:6;4469;4477;4485;4493;4501;4509;4562:3;4550:9;4541:7;4537:23;4533:33;4530:53;;;4579:1;4576;4569:12;4530:53;4615:9;4602:23;4592:33;;4644:2;4693;4682:9;4678:18;4665:32;4655:42;;4744:2;4733:9;4729:18;4716:32;4706:42;;4795:2;4784:9;4780:18;4767:32;4757:42;;4850:3;4839:9;4835:19;4822:33;4874:18;4915:2;4907:6;4904:14;4901:34;;;4931:1;4928;4921:12;4901:34;4969:6;4958:9;4954:22;4944:32;;5014:7;5007:4;5003:2;4999:13;4995:27;4985:55;;5036:1;5033;5026:12;4985:55;5072:2;5059:16;5094:2;5090;5087:10;5084:36;;;5100:18;;:::i;:::-;5142:53;5185:2;5166:13;;-1:-1:-1;;5162:27:1;5158:36;;5142:53;:::i;:::-;5129:66;;5218:2;5211:5;5204:17;5258:7;5253:2;5248;5244;5240:11;5236:20;5233:33;5230:53;;;5279:1;5276;5269:12;5230:53;5334:2;5329;5325;5321:11;5316:2;5309:5;5305:14;5292:45;5378:1;5373:2;5368;5361:5;5357:14;5353:23;5346:34;;5399:5;5389:15;;;;;5423:36;5454:3;5443:9;5439:19;5423:36;:::i;:::-;5413:46;;5478:36;5509:3;5498:9;5494:19;5478:36;:::i;:::-;5468:46;;4344:1176;;;;;;;;;;:::o;5525:186::-;5584:6;5637:2;5625:9;5616:7;5612:23;5608:32;5605:52;;;5653:1;5650;5643:12;5605:52;5676:29;5695:9;5676:29;:::i;6106:248::-;6171:6;6179;6232:2;6220:9;6211:7;6207:23;6203:32;6200:52;;;6248:1;6245;6238:12;6200:52;6284:9;6271:23;6261:33;;6313:35;6344:2;6333:9;6329:18;6313:35;:::i;6359:254::-;6427:6;6435;6488:2;6476:9;6467:7;6463:23;6459:32;6456:52;;;6504:1;6501;6494:12;6456:52;6527:29;6546:9;6527:29;:::i;:::-;6517:39;6603:2;6588:18;;;;6575:32;;-1:-1:-1;;;6359:254:1:o;6618:331::-;6820:2;6802:21;;;6859:1;6839:18;;;6832:29;-1:-1:-1;;;6892:2:1;6877:18;;6870:38;6940:2;6925:18;;6618:331::o;6954:127::-;7015:10;7010:3;7006:20;7003:1;6996:31;7046:4;7043:1;7036:15;7070:4;7067:1;7060:15;7086:127;7147:10;7142:3;7138:20;7135:1;7128:31;7178:4;7175:1;7168:15;7202:4;7199:1;7192:15;7218:135;7257:3;7278:17;;;7275:43;;7298:18;;:::i;:::-;-1:-1:-1;7345:1:1;7334:13;;7218:135::o;7698:168::-;7771:9;;;7802;;7819:15;;;7813:22;;7799:37;7789:71;;7840:18;;:::i;7871:217::-;7911:1;7937;7927:132;;7981:10;7976:3;7972:20;7969:1;7962:31;8016:4;8013:1;8006:15;8044:4;8041:1;8034:15;7927:132;-1:-1:-1;8073:9:1;;7871:217::o;8093:128::-;8160:9;;;8181:11;;;8178:37;;;8195:18;;:::i;8226:380::-;8305:1;8301:12;;;;8348;;;8369:61;;8423:4;8415:6;8411:17;8401:27;;8369:61;8476:2;8468:6;8465:14;8445:18;8442:38;8439:161;;8522:10;8517:3;8513:20;8510:1;8503:31;8557:4;8554:1;8547:15;8585:4;8582:1;8575:15;8439:161;;8226:380;;;:::o;8737:545::-;8839:2;8834:3;8831:11;8828:448;;;8875:1;8900:5;8896:2;8889:17;8945:4;8941:2;8931:19;9015:2;9003:10;8999:19;8996:1;8992:27;8986:4;8982:38;9051:4;9039:10;9036:20;9033:47;;;-1:-1:-1;9074:4:1;9033:47;9129:2;9124:3;9120:12;9117:1;9113:20;9107:4;9103:31;9093:41;;9184:82;9202:2;9195:5;9192:13;9184:82;;;9247:17;;;9228:1;9217:13;9184:82;;;9188:3;;;8737:545;;;:::o;9458:1352::-;9584:3;9578:10;9611:18;9603:6;9600:30;9597:56;;;9633:18;;:::i;:::-;9662:97;9752:6;9712:38;9744:4;9738:11;9712:38;:::i;:::-;9706:4;9662:97;:::i;:::-;9814:4;;9878:2;9867:14;;9895:1;9890:663;;;;10597:1;10614:6;10611:89;;;-1:-1:-1;10666:19:1;;;10660:26;10611:89;-1:-1:-1;;9415:1:1;9411:11;;;9407:24;9403:29;9393:40;9439:1;9435:11;;;9390:57;10713:81;;9860:944;;9890:663;8684:1;8677:14;;;8721:4;8708:18;;-1:-1:-1;;9926:20:1;;;10044:236;10058:7;10055:1;10052:14;10044:236;;;10147:19;;;10141:26;10126:42;;10239:27;;;;10207:1;10195:14;;;;10074:19;;10044:236;;;10048:3;10308:6;10299:7;10296:19;10293:201;;;10369:19;;;10363:26;-1:-1:-1;;10452:1:1;10448:14;;;10464:3;10444:24;10440:37;10436:42;10421:58;10406:74;;10293:201;-1:-1:-1;;;;;10540:1:1;10524:14;;;10520:22;10507:36;;-1:-1:-1;9458:1352:1:o;10815:589::-;11098:6;11087:9;11080:25;11141:6;11136:2;11125:9;11121:18;11114:34;11184:6;11179:2;11168:9;11164:18;11157:34;11227:6;11222:2;11211:9;11207:18;11200:34;11271:3;11265;11254:9;11250:19;11243:32;11061:4;11292:46;11333:3;11322:9;11318:19;11310:6;11292:46;:::i;:::-;11284:54;;11389:6;11382:14;11375:22;11369:3;11358:9;11354:19;11347:51;10815:589;;;;;;;;;:::o;12791:407::-;12993:2;12975:21;;;13032:2;13012:18;;;13005:30;13071:34;13066:2;13051:18;;13044:62;-1:-1:-1;;;13137:2:1;13122:18;;13115:41;13188:3;13173:19;;12791:407::o
Swarm Source
ipfs://9e42285e7654b74d24c31a9c992ff76f066c15a973fd5772ab0be37f77c3d16b
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.