Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Upgrade To | 16485345 | 1024 days ago | IN | 0 ETH | 0.00139704 |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ValidatorProxy
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-01-25
*/
// Dependency file: @openzeppelin/contracts/proxy/Proxy.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)
// pragma solidity ^0.8.0;
/**
* @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 {
_beforeFallback();
_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();
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
* is empty.
*/
receive() external payable virtual {
_fallback();
}
/**
* @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
* call, or as part of the Solidity `fallback` or `receive` functions.
*
* If overridden should call `super._beforeFallback()`.
*/
function _beforeFallback() internal virtual {}
}
// Dependency file: @openzeppelin/contracts/proxy/beacon/IBeacon.sol
// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)
// pragma solidity ^0.8.0;
/**
* @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.
*
* {BeaconProxy} will check that this address is a contract.
*/
function implementation() external view returns (address);
}
// Dependency file: @openzeppelin/contracts/interfaces/draft-IERC1822.sol
// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)
// pragma solidity ^0.8.0;
/**
* @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified
* proxy whose upgrades are fully controlled by the current implementation.
*/
interface IERC1822Proxiable {
/**
* @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation
* address.
*
* IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
* bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
* function revert if invoked through a proxy.
*/
function proxiableUUID() external view returns (bytes32);
}
// Dependency file: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
// pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [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://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return 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);
}
}
}
// Dependency file: @openzeppelin/contracts/utils/StorageSlot.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)
// pragma solidity ^0.8.0;
/**
* @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:
* ```
* 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(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
* }
* }
* ```
*
* _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
*/
library StorageSlot {
struct AddressSlot {
address value;
}
struct BooleanSlot {
bool value;
}
struct Bytes32Slot {
bytes32 value;
}
struct Uint256Slot {
uint256 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
}
}
}
// Dependency file: @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol
// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)
// pragma solidity ^0.8.2;
// import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol";
// import "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";
// import "@openzeppelin/contracts/utils/Address.sol";
// import "@openzeppelin/contracts/utils/StorageSlot.sol";
/**
* @dev This abstract contract provides getters and event emitting update functions for
* https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
*
* _Available since v4.1._
*
* @custom:oz-upgrades-unsafe-allow delegatecall
*/
abstract contract ERC1967Upgrade {
// This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev Emitted when the implementation is upgraded.
*/
event Upgraded(address indexed implementation);
/**
* @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 {
require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
}
/**
* @dev Perform implementation upgrade
*
* Emits an {Upgraded} event.
*/
function _upgradeTo(address newImplementation) internal {
_setImplementation(newImplementation);
emit Upgraded(newImplementation);
}
/**
* @dev Perform implementation upgrade with additional setup call.
*
* Emits an {Upgraded} event.
*/
function _upgradeToAndCall(
address newImplementation,
bytes memory data,
bool forceCall
) internal {
_upgradeTo(newImplementation);
if (data.length > 0 || forceCall) {
Address.functionDelegateCall(newImplementation, data);
}
}
/**
* @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
*
* Emits an {Upgraded} event.
*/
function _upgradeToAndCallUUPS(
address newImplementation,
bytes memory data,
bool forceCall
) internal {
// Upgrades from old implementations will perform a rollback test. This test requires the new
// implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing
// this special case will break upgrade paths from old UUPS implementation to new ones.
if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {
_setImplementation(newImplementation);
} else {
try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {
require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID");
} catch {
revert("ERC1967Upgrade: new implementation is not UUPS");
}
_upgradeToAndCall(newImplementation, data, forceCall);
}
}
/**
* @dev Storage slot with the admin of the contract.
* This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
/**
* @dev Emitted when the admin account has changed.
*/
event AdminChanged(address previousAdmin, address newAdmin);
/**
* @dev Returns the current admin.
*/
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 {
require(newAdmin != address(0), "ERC1967: new admin is the zero address");
StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
}
/**
* @dev Changes the admin of the proxy.
*
* Emits an {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 bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
*/
bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;
/**
* @dev Emitted when the beacon is upgraded.
*/
event BeaconUpgraded(address indexed beacon);
/**
* @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 {
require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract");
require(
Address.isContract(IBeacon(newBeacon).implementation()),
"ERC1967: beacon implementation is not a contract"
);
StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;
}
/**
* @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
* not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
*
* Emits a {BeaconUpgraded} event.
*/
function _upgradeBeaconToAndCall(
address newBeacon,
bytes memory data,
bool forceCall
) internal {
_setBeacon(newBeacon);
emit BeaconUpgraded(newBeacon);
if (data.length > 0 || forceCall) {
Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
}
}
}
// Root file: src/ProxyFabricaValidator.sol
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)
pragma solidity ^0.8.0;
// import "@openzeppelin/contracts/proxy/Proxy.sol";
// import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol";
contract ValidatorProxy is Proxy, ERC1967Upgrade {
/**
* @dev Sets the upgradeable proxy with an implementation specified by `_logic`.
*/
function upgradeTo(address _logic) public {
assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
_upgradeTo(_logic);
}
/**
* @dev Sets the upgradeable proxy with an implementation specified by `_logic`.
*
* If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
* function call, and allows initializing the storage of the proxy like a Solidity constructor.
*/
function upgradeToAndCall(address _logic, bytes memory _data, bool _forceCall) public {
assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
_upgradeToAndCall(_logic, _data, _forceCall);(_logic);
}
/**
* @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
*
* If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
* function call, and allows initializing the storage of the proxy like a Solidity constructor.
*/
function upgradeToAndCallUUPS(address _logic, bytes memory _data, bool _forceCall) public {
assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
_upgradeToAndCallUUPS(_logic, _data, _forceCall);(_logic);
}
/**
* @dev Returns the current implementation address.
*/
function getImplementation() public view returns (address) {
return _getImplementation();
}
/**
* @dev Returns the current admin address.
*/
function getAdmin() public view returns (address) {
return ERC1967Upgrade._getAdmin();
}
/**
* @dev Updates the current admin address.
*/
function changeAdmin(address _newAdmin) public {
return ERC1967Upgrade._changeAdmin(_newAdmin);
}
/**
* @dev Returns the current beacon address.
*/
function getBeacon() public view returns (address) {
return ERC1967Upgrade._getBeacon();
}
function upgradeBeaconToAndCall(address _newBeacon, bytes memory _data, bool _forceCall) public {
return ERC1967Upgrade._upgradeBeaconToAndCall(_newBeacon, _data, _forceCall);
}
/**
* @dev Returns the current implementation address. Override needed for the Proxy interface.
*/
function _implementation() internal view virtual override returns (address impl) {
return ERC1967Upgrade._getImplementation();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBeacon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newBeacon","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bool","name":"_forceCall","type":"bool"}],"name":"upgradeBeaconToAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bool","name":"_forceCall","type":"bool"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bool","name":"_forceCall","type":"bool"}],"name":"upgradeToAndCallUUPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b506115fd806100206000396000f3fe60806040526004361061007f5760003560e01c80636e9960c31161004e5780636e9960c31461013e5780638f28397014610169578063aaf10f4214610192578063b7f45a7f146101bd5761008e565b806306d2e426146100985780632d6b3a6b146100c15780633659cfe6146100ec5780635aabcad5146101155761008e565b3661008e5761008c6101e6565b005b6100966101e6565b005b3480156100a457600080fd5b506100bf60048036038101906100ba9190610e99565b610200565b005b3480156100cd57600080fd5b506100d6610275565b6040516100e39190610f17565b60405180910390f35b3480156100f857600080fd5b50610113600480360381019061010e9190610f32565b610284565b005b34801561012157600080fd5b5061013c60048036038101906101379190610e99565b6102f5565b005b34801561014a57600080fd5b50610153610305565b6040516101609190610f17565b60405180910390f35b34801561017557600080fd5b50610190600480360381019061018b9190610f32565b610314565b005b34801561019e57600080fd5b506101a7610320565b6040516101b49190610f17565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190610e99565b61032f565b005b6101ee6103a4565b6101fe6101f96103a6565b6103b5565b565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102309190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461026557610264610fcc565b5b6102708383836103db565b505050565b600061027f610407565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102b49190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b146102e9576102e8610fcc565b5b6102f28161045e565b50565b6103008383836104ad565b505050565b600061030f61058a565b905090565b61031d816105e1565b50565b600061032a61062d565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c61035f9190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461039457610393610fcc565b5b61039f838383610684565b505050565b565b60006103b061062d565b905090565b3660008037600080366000845af43d6000803e80600081146103d6573d6000f35b3d6000fd5b6103e48361045e565b6000825111806103f15750805b156104025761040083836107f2565b505b505050565b60006104357fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61046781610829565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6104b6836108e2565b8273ffffffffffffffffffffffffffffffffffffffff167f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e60405160405180910390a26000825111806105065750805b15610585576105838373ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190611010565b836107f2565b505b505050565b60006105b87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61060a61058a565b8260405161061992919061103d565b60405180910390a161062a81610a51565b50565b600061065b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106b07f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b610b31565b60000160009054906101000a900460ff16156106d4576106cf83610829565b6107ed565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561073c57506040513d601f19601f82011682018060405250810190610739919061109c565b60015b61077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107729061114c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d7906111de565b60405180910390fd5b506107ec8383836103db565b5b505050565b606061081783836040518060600160405280602781526020016115a160279139610b3b565b905092915050565b6000819050919050565b61083281610bc1565b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890611270565b60405180910390fd5b8061089e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108eb81610bc1565b61092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611302565b60405180910390fd5b6109a18173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190611010565b610bc1565b6109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790611394565b60405180910390fd5b80610a0d7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790611426565b60405180910390fd5b80610aed7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610b6591906114b7565b600060405180830381855af49150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5091509150610bb686838387610be4565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315610c46576000835103610c3e57610bfe85610bc1565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c349061151a565b60405180910390fd5b5b829050610c51565b610c508383610c59565b5b949350505050565b600082511115610c6c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0919061157e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce882610cbd565b9050919050565b610cf881610cdd565b8114610d0357600080fd5b50565b600081359050610d1581610cef565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d6e82610d25565b810181811067ffffffffffffffff82111715610d8d57610d8c610d36565b5b80604052505050565b6000610da0610ca9565b9050610dac8282610d65565b919050565b600067ffffffffffffffff821115610dcc57610dcb610d36565b5b610dd582610d25565b9050602081019050919050565b82818337600083830152505050565b6000610e04610dff84610db1565b610d96565b905082815260208101848484011115610e2057610e1f610d20565b5b610e2b848285610de2565b509392505050565b600082601f830112610e4857610e47610d1b565b5b8135610e58848260208601610df1565b91505092915050565b60008115159050919050565b610e7681610e61565b8114610e8157600080fd5b50565b600081359050610e9381610e6d565b92915050565b600080600060608486031215610eb257610eb1610cb3565b5b6000610ec086828701610d06565b935050602084013567ffffffffffffffff811115610ee157610ee0610cb8565b5b610eed86828701610e33565b9250506040610efe86828701610e84565b9150509250925092565b610f1181610cdd565b82525050565b6000602082019050610f2c6000830184610f08565b92915050565b600060208284031215610f4857610f47610cb3565b5b6000610f5684828501610d06565b91505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fa382610f5f565b9150610fae83610f5f565b9250828203905081811115610fc657610fc5610f69565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061100a81610cef565b92915050565b60006020828403121561102657611025610cb3565b5b600061103484828501610ffb565b91505092915050565b60006040820190506110526000830185610f08565b61105f6020830184610f08565b9392505050565b6000819050919050565b61107981611066565b811461108457600080fd5b50565b60008151905061109681611070565b92915050565b6000602082840312156110b2576110b1610cb3565b5b60006110c084828501611087565b91505092915050565b600082825260208201905092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000611136602e836110c9565b9150611141826110da565b604082019050919050565b6000602082019050818103600083015261116581611129565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006111c86029836110c9565b91506111d38261116c565b604082019050919050565b600060208201905081810360008301526111f7816111bb565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061125a602d836110c9565b9150611265826111fe565b604082019050919050565b600060208201905081810360008301526112898161124d565b9050919050565b7f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006112ec6025836110c9565b91506112f782611290565b604082019050919050565b6000602082019050818103600083015261131b816112df565b9050919050565b7f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960008201527f73206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b600061137e6030836110c9565b915061138982611322565b604082019050919050565b600060208201905081810360008301526113ad81611371565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114106026836110c9565b915061141b826113b4565b604082019050919050565b6000602082019050818103600083015261143f81611403565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561147a57808201518184015260208101905061145f565b60008484015250505050565b600061149182611446565b61149b8185611451565b93506114ab81856020860161145c565b80840191505092915050565b60006114c38284611486565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611504601d836110c9565b915061150f826114ce565b602082019050919050565b60006020820190508181036000830152611533816114f7565b9050919050565b600081519050919050565b60006115508261153a565b61155a81856110c9565b935061156a81856020860161145c565b61157381610d25565b840191505092915050565b600060208201905081810360008301526115988184611545565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205761fd36c6d9c3eff370e39ef47812289221c093a878e1e3910373c4927a6ec764736f6c63430008110033
Deployed Bytecode
0x60806040526004361061007f5760003560e01c80636e9960c31161004e5780636e9960c31461013e5780638f28397014610169578063aaf10f4214610192578063b7f45a7f146101bd5761008e565b806306d2e426146100985780632d6b3a6b146100c15780633659cfe6146100ec5780635aabcad5146101155761008e565b3661008e5761008c6101e6565b005b6100966101e6565b005b3480156100a457600080fd5b506100bf60048036038101906100ba9190610e99565b610200565b005b3480156100cd57600080fd5b506100d6610275565b6040516100e39190610f17565b60405180910390f35b3480156100f857600080fd5b50610113600480360381019061010e9190610f32565b610284565b005b34801561012157600080fd5b5061013c60048036038101906101379190610e99565b6102f5565b005b34801561014a57600080fd5b50610153610305565b6040516101609190610f17565b60405180910390f35b34801561017557600080fd5b50610190600480360381019061018b9190610f32565b610314565b005b34801561019e57600080fd5b506101a7610320565b6040516101b49190610f17565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190610e99565b61032f565b005b6101ee6103a4565b6101fe6101f96103a6565b6103b5565b565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102309190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461026557610264610fcc565b5b6102708383836103db565b505050565b600061027f610407565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102b49190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b146102e9576102e8610fcc565b5b6102f28161045e565b50565b6103008383836104ad565b505050565b600061030f61058a565b905090565b61031d816105e1565b50565b600061032a61062d565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c61035f9190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461039457610393610fcc565b5b61039f838383610684565b505050565b565b60006103b061062d565b905090565b3660008037600080366000845af43d6000803e80600081146103d6573d6000f35b3d6000fd5b6103e48361045e565b6000825111806103f15750805b156104025761040083836107f2565b505b505050565b60006104357fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61046781610829565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6104b6836108e2565b8273ffffffffffffffffffffffffffffffffffffffff167f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e60405160405180910390a26000825111806105065750805b15610585576105838373ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190611010565b836107f2565b505b505050565b60006105b87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61060a61058a565b8260405161061992919061103d565b60405180910390a161062a81610a51565b50565b600061065b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106b07f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b610b31565b60000160009054906101000a900460ff16156106d4576106cf83610829565b6107ed565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561073c57506040513d601f19601f82011682018060405250810190610739919061109c565b60015b61077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107729061114c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d7906111de565b60405180910390fd5b506107ec8383836103db565b5b505050565b606061081783836040518060600160405280602781526020016115a160279139610b3b565b905092915050565b6000819050919050565b61083281610bc1565b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890611270565b60405180910390fd5b8061089e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108eb81610bc1565b61092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611302565b60405180910390fd5b6109a18173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190611010565b610bc1565b6109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790611394565b60405180910390fd5b80610a0d7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790611426565b60405180910390fd5b80610aed7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610b6591906114b7565b600060405180830381855af49150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5091509150610bb686838387610be4565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315610c46576000835103610c3e57610bfe85610bc1565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c349061151a565b60405180910390fd5b5b829050610c51565b610c508383610c59565b5b949350505050565b600082511115610c6c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0919061157e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce882610cbd565b9050919050565b610cf881610cdd565b8114610d0357600080fd5b50565b600081359050610d1581610cef565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d6e82610d25565b810181811067ffffffffffffffff82111715610d8d57610d8c610d36565b5b80604052505050565b6000610da0610ca9565b9050610dac8282610d65565b919050565b600067ffffffffffffffff821115610dcc57610dcb610d36565b5b610dd582610d25565b9050602081019050919050565b82818337600083830152505050565b6000610e04610dff84610db1565b610d96565b905082815260208101848484011115610e2057610e1f610d20565b5b610e2b848285610de2565b509392505050565b600082601f830112610e4857610e47610d1b565b5b8135610e58848260208601610df1565b91505092915050565b60008115159050919050565b610e7681610e61565b8114610e8157600080fd5b50565b600081359050610e9381610e6d565b92915050565b600080600060608486031215610eb257610eb1610cb3565b5b6000610ec086828701610d06565b935050602084013567ffffffffffffffff811115610ee157610ee0610cb8565b5b610eed86828701610e33565b9250506040610efe86828701610e84565b9150509250925092565b610f1181610cdd565b82525050565b6000602082019050610f2c6000830184610f08565b92915050565b600060208284031215610f4857610f47610cb3565b5b6000610f5684828501610d06565b91505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fa382610f5f565b9150610fae83610f5f565b9250828203905081811115610fc657610fc5610f69565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061100a81610cef565b92915050565b60006020828403121561102657611025610cb3565b5b600061103484828501610ffb565b91505092915050565b60006040820190506110526000830185610f08565b61105f6020830184610f08565b9392505050565b6000819050919050565b61107981611066565b811461108457600080fd5b50565b60008151905061109681611070565b92915050565b6000602082840312156110b2576110b1610cb3565b5b60006110c084828501611087565b91505092915050565b600082825260208201905092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000611136602e836110c9565b9150611141826110da565b604082019050919050565b6000602082019050818103600083015261116581611129565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006111c86029836110c9565b91506111d38261116c565b604082019050919050565b600060208201905081810360008301526111f7816111bb565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061125a602d836110c9565b9150611265826111fe565b604082019050919050565b600060208201905081810360008301526112898161124d565b9050919050565b7f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006112ec6025836110c9565b91506112f782611290565b604082019050919050565b6000602082019050818103600083015261131b816112df565b9050919050565b7f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960008201527f73206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b600061137e6030836110c9565b915061138982611322565b604082019050919050565b600060208201905081810360008301526113ad81611371565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114106026836110c9565b915061141b826113b4565b604082019050919050565b6000602082019050818103600083015261143f81611403565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561147a57808201518184015260208101905061145f565b60008484015250505050565b600061149182611446565b61149b8185611451565b93506114ab81856020860161145c565b80840191505092915050565b60006114c38284611486565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611504601d836110c9565b915061150f826114ce565b602082019050919050565b60006020820190508181036000830152611533816114f7565b9050919050565b600081519050919050565b60006115508261153a565b61155a81856110c9565b935061156a81856020860161145c565b61157381610d25565b840191505092915050565b600060208201905081810360008301526115988184611545565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205761fd36c6d9c3eff370e39ef47812289221c093a878e1e3910373c4927a6ec764736f6c63430008110033
Deployed Bytecode Sourcemap
24225:2775:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:11;:9;:11::i;:::-;24225:2775;;2808:11;:9;:11::i;:::-;24225:2775;24907:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26428:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24385:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26540:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26066:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26242:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25887:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25532:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2445:113;2494:17;:15;:17::i;:::-;2522:28;2532:17;:15;:17::i;:::-;2522:9;:28::i;:::-;2445:113::o;24907:264::-;25096:1;25051:41;25043:50;;:54;;;;:::i;:::-;25035:63;;18309:66;25011:20;;:87;25004:95;;;;:::i;:::-;;25110:44;25128:6;25136:5;25143:10;25110:17;:44::i;:::-;24907:264;;;:::o;26428:104::-;26470:7;26497:27;:25;:27::i;:::-;26490:34;;26428:104;:::o;24385:185::-;24530:1;24485:41;24477:50;;:54;;;;:::i;:::-;24469:63;;18309:66;24445:20;;:87;24438:95;;;;:::i;:::-;;24544:18;24555:6;24544:10;:18::i;:::-;24385:185;:::o;26540:191::-;26654:69;26693:10;26705:5;26712:10;26654:38;:69::i;:::-;26540:191;;;:::o;26066:102::-;26107:7;26134:26;:24;:26::i;:::-;26127:33;;26066:102;:::o;26242:111::-;26307:38;26335:9;26307:27;:38::i;:::-;26242:111;:::o;25887:105::-;25937:7;25964:20;:18;:20::i;:::-;25957:27;;25887:105;:::o;25532:272::-;25725:1;25680:41;25672:50;;:54;;;;:::i;:::-;25664:63;;18309:66;25640:20;;:87;25633:95;;;;:::i;:::-;;25739:48;25761:6;25769:5;25776:10;25739:21;:48::i;:::-;25532:272;;;:::o;3348:46::-;:::o;26855:142::-;26922:12;26954:35;:33;:35::i;:::-;26947:42;;26855:142;:::o;1035:918::-;1378:14;1375:1;1372;1359:34;1596:1;1593;1577:14;1574:1;1558:14;1551:5;1538:60;1675:16;1672:1;1669;1654:38;1715:6;1789:1;1784:68;;;;1903:16;1900:1;1893:27;1784:68;1820:16;1817:1;1810:27;19499:304;19642:29;19653:17;19642:10;:29::i;:::-;19700:1;19686:4;:11;:15;:28;;;;19705:9;19686:28;19682:114;;;19731:53;19760:17;19779:4;19731:28;:53::i;:::-;;19682:114;19499:304;;;:::o;22691:126::-;22736:7;22763:40;22436:66;22790:12;;22763:26;:40::i;:::-;:46;;;;;;;;;;;;22756:53;;22691:126;:::o;19203:155::-;19270:37;19289:17;19270:18;:37::i;:::-;19332:17;19323:27;;;;;;;;;;;;19203:155;:::o;23593:353::-;23734:21;23745:9;23734:10;:21::i;:::-;23786:9;23771:25;;;;;;;;;;;;23825:1;23811:4;:11;:15;:28;;;;23830:9;23811:28;23807:132;;;23856:71;23893:9;23885:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23922:4;23856:28;:71::i;:::-;;23807:132;23593:353;;;:::o;21475:124::-;21519:7;21546:39;21199:66;21573:11;;21546:26;:39::i;:::-;:45;;;;;;;;;;;;21539:52;;21475:124;:::o;22008:138::-;22073:35;22086:11;:9;:11::i;:::-;22099:8;22073:35;;;;;;;:::i;:::-;;;;;;;;22119:19;22129:8;22119:9;:19::i;:::-;22008:138;:::o;18590:142::-;18643:7;18670:48;18309:66;18697:20;;18670:26;:48::i;:::-;:54;;;;;;;;;;;;18663:61;;18590:142;:::o;19982:970::-;20436:42;17961:66;20463:14;;20436:26;:42::i;:::-;:48;;;;;;;;;;;;20432:513;;;20501:37;20520:17;20501:18;:37::i;:::-;20432:513;;;20593:17;20575:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20571:295;;20794:56;;;;;;;;;;:::i;:::-;;;;;;;;20571:295;18309:66;20686:20;;20678:4;:28;20670:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;20628:140;20880:53;20898:17;20917:4;20923:9;20880:17;:53::i;:::-;20432:513;19982:970;;;:::o;11538:200::-;11621:12;11653:77;11674:6;11682:4;11653:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;11646:84;;11538:200;;;;:::o;16011:195::-;16072:21;16184:4;16174:14;;16011:195;;;:::o;18828:262::-;18910:37;18929:17;18910:18;:37::i;:::-;18902:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19065:17;19008:48;18309:66;19035:20;;19008:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;18828:262;:::o;22904:378::-;22970:29;22989:9;22970:18;:29::i;:::-;22962:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:55;23101:9;23093:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23074:18;:55::i;:::-;23052:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;23265:9;23216:40;22436:66;23243:12;;23216:26;:40::i;:::-;:46;;;:58;;;;;;;;;;;;;;;;;;22904:378;:::o;21686:204::-;21770:1;21750:22;;:8;:22;;;21742:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21874:8;21826:39;21199:66;21853:11;;21826:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;21686:204;:::o;16309:195::-;16370:21;16482:4;16472:14;;16309:195;;;:::o;11932:332::-;12077:12;12103;12117:23;12144:6;:19;;12164:4;12144:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12102:67;;;;12187:69;12214:6;12222:7;12231:10;12243:12;12187:26;:69::i;:::-;12180:76;;;;11932:332;;;;;:::o;6110:326::-;6170:4;6427:1;6405:7;:19;;;:23;6398:30;;6110:326;;;:::o;12560:644::-;12745:12;12774:7;12770:427;;;12823:1;12802:10;:17;:22;12798:290;;13020:18;13031:6;13020:10;:18::i;:::-;13012:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12798:290;13109:10;13102:17;;;;12770:427;13152:33;13160:10;13172:12;13152:7;:33::i;:::-;12560:644;;;;;;;:::o;13746:552::-;13927:1;13907:10;:17;:21;13903:388;;;14139:10;14133:17;14196:15;14183:10;14179:2;14175:19;14168:44;13903:388;14266:12;14259:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:102;1128:6;1179:2;1175:7;1170:2;1163:5;1159:14;1155:28;1145:38;;1087:102;;;:::o;1195:180::-;1243:77;1240:1;1233:88;1340:4;1337:1;1330:15;1364:4;1361:1;1354:15;1381:281;1464:27;1486:4;1464:27;:::i;:::-;1456:6;1452:40;1594:6;1582:10;1579:22;1558:18;1546:10;1543:34;1540:62;1537:88;;;1605:18;;:::i;:::-;1537:88;1645:10;1641:2;1634:22;1424:238;1381:281;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1668:129;;;:::o;1803:307::-;1864:4;1954:18;1946:6;1943:30;1940:56;;;1976:18;;:::i;:::-;1940:56;2014:29;2036:6;2014:29;:::i;:::-;2006:37;;2098:4;2092;2088:15;2080:23;;1803:307;;;:::o;2116:146::-;2213:6;2208:3;2203;2190:30;2254:1;2245:6;2240:3;2236:16;2229:27;2116:146;;;:::o;2268:423::-;2345:5;2370:65;2386:48;2427:6;2386:48;:::i;:::-;2370:65;:::i;:::-;2361:74;;2458:6;2451:5;2444:21;2496:4;2489:5;2485:16;2534:3;2525:6;2520:3;2516:16;2513:25;2510:112;;;2541:79;;:::i;:::-;2510:112;2631:54;2678:6;2673:3;2668;2631:54;:::i;:::-;2351:340;2268:423;;;;;:::o;2710:338::-;2765:5;2814:3;2807:4;2799:6;2795:17;2791:27;2781:122;;2822:79;;:::i;:::-;2781:122;2939:6;2926:20;2964:78;3038:3;3030:6;3023:4;3015:6;3011:17;2964:78;:::i;:::-;2955:87;;2771:277;2710:338;;;;:::o;3054:90::-;3088:7;3131:5;3124:13;3117:21;3106:32;;3054:90;;;:::o;3150:116::-;3220:21;3235:5;3220:21;:::i;:::-;3213:5;3210:32;3200:60;;3256:1;3253;3246:12;3200:60;3150:116;:::o;3272:133::-;3315:5;3353:6;3340:20;3331:29;;3369:30;3393:5;3369:30;:::i;:::-;3272:133;;;;:::o;3411:791::-;3494:6;3502;3510;3559:2;3547:9;3538:7;3534:23;3530:32;3527:119;;;3565:79;;:::i;:::-;3527:119;3685:1;3710:53;3755:7;3746:6;3735:9;3731:22;3710:53;:::i;:::-;3700:63;;3656:117;3840:2;3829:9;3825:18;3812:32;3871:18;3863:6;3860:30;3857:117;;;3893:79;;:::i;:::-;3857:117;3998:62;4052:7;4043:6;4032:9;4028:22;3998:62;:::i;:::-;3988:72;;3783:287;4109:2;4135:50;4177:7;4168:6;4157:9;4153:22;4135:50;:::i;:::-;4125:60;;4080:115;3411:791;;;;;:::o;4208:118::-;4295:24;4313:5;4295:24;:::i;:::-;4290:3;4283:37;4208:118;;:::o;4332:222::-;4425:4;4463:2;4452:9;4448:18;4440:26;;4476:71;4544:1;4533:9;4529:17;4520:6;4476:71;:::i;:::-;4332:222;;;;:::o;4560:329::-;4619:6;4668:2;4656:9;4647:7;4643:23;4639:32;4636:119;;;4674:79;;:::i;:::-;4636:119;4794:1;4819:53;4864:7;4855:6;4844:9;4840:22;4819:53;:::i;:::-;4809:63;;4765:117;4560:329;;;;:::o;4895:77::-;4932:7;4961:5;4950:16;;4895:77;;;:::o;4978:180::-;5026:77;5023:1;5016:88;5123:4;5120:1;5113:15;5147:4;5144:1;5137:15;5164:194;5204:4;5224:20;5242:1;5224:20;:::i;:::-;5219:25;;5258:20;5276:1;5258:20;:::i;:::-;5253:25;;5302:1;5299;5295:9;5287:17;;5326:1;5320:4;5317:11;5314:37;;;5331:18;;:::i;:::-;5314:37;5164:194;;;;:::o;5364:180::-;5412:77;5409:1;5402:88;5509:4;5506:1;5499:15;5533:4;5530:1;5523:15;5550:143;5607:5;5638:6;5632:13;5623:22;;5654:33;5681:5;5654:33;:::i;:::-;5550:143;;;;:::o;5699:351::-;5769:6;5818:2;5806:9;5797:7;5793:23;5789:32;5786:119;;;5824:79;;:::i;:::-;5786:119;5944:1;5969:64;6025:7;6016:6;6005:9;6001:22;5969:64;:::i;:::-;5959:74;;5915:128;5699:351;;;;:::o;6056:332::-;6177:4;6215:2;6204:9;6200:18;6192:26;;6228:71;6296:1;6285:9;6281:17;6272:6;6228:71;:::i;:::-;6309:72;6377:2;6366:9;6362:18;6353:6;6309:72;:::i;:::-;6056:332;;;;;:::o;6394:77::-;6431:7;6460:5;6449:16;;6394:77;;;:::o;6477:122::-;6550:24;6568:5;6550:24;:::i;:::-;6543:5;6540:35;6530:63;;6589:1;6586;6579:12;6530:63;6477:122;:::o;6605:143::-;6662:5;6693:6;6687:13;6678:22;;6709:33;6736:5;6709:33;:::i;:::-;6605:143;;;;:::o;6754:351::-;6824:6;6873:2;6861:9;6852:7;6848:23;6844:32;6841:119;;;6879:79;;:::i;:::-;6841:119;6999:1;7024:64;7080:7;7071:6;7060:9;7056:22;7024:64;:::i;:::-;7014:74;;6970:128;6754:351;;;;:::o;7111:169::-;7195:11;7229:6;7224:3;7217:19;7269:4;7264:3;7260:14;7245:29;;7111:169;;;;:::o;7286:233::-;7426:34;7422:1;7414:6;7410:14;7403:58;7495:16;7490:2;7482:6;7478:15;7471:41;7286:233;:::o;7525:366::-;7667:3;7688:67;7752:2;7747:3;7688:67;:::i;:::-;7681:74;;7764:93;7853:3;7764:93;:::i;:::-;7882:2;7877:3;7873:12;7866:19;;7525:366;;;:::o;7897:419::-;8063:4;8101:2;8090:9;8086:18;8078:26;;8150:9;8144:4;8140:20;8136:1;8125:9;8121:17;8114:47;8178:131;8304:4;8178:131;:::i;:::-;8170:139;;7897:419;;;:::o;8322:228::-;8462:34;8458:1;8450:6;8446:14;8439:58;8531:11;8526:2;8518:6;8514:15;8507:36;8322:228;:::o;8556:366::-;8698:3;8719:67;8783:2;8778:3;8719:67;:::i;:::-;8712:74;;8795:93;8884:3;8795:93;:::i;:::-;8913:2;8908:3;8904:12;8897:19;;8556:366;;;:::o;8928:419::-;9094:4;9132:2;9121:9;9117:18;9109:26;;9181:9;9175:4;9171:20;9167:1;9156:9;9152:17;9145:47;9209:131;9335:4;9209:131;:::i;:::-;9201:139;;8928:419;;;:::o;9353:232::-;9493:34;9489:1;9481:6;9477:14;9470:58;9562:15;9557:2;9549:6;9545:15;9538:40;9353:232;:::o;9591:366::-;9733:3;9754:67;9818:2;9813:3;9754:67;:::i;:::-;9747:74;;9830:93;9919:3;9830:93;:::i;:::-;9948:2;9943:3;9939:12;9932:19;;9591:366;;;:::o;9963:419::-;10129:4;10167:2;10156:9;10152:18;10144:26;;10216:9;10210:4;10206:20;10202:1;10191:9;10187:17;10180:47;10244:131;10370:4;10244:131;:::i;:::-;10236:139;;9963:419;;;:::o;10388:224::-;10528:34;10524:1;10516:6;10512:14;10505:58;10597:7;10592:2;10584:6;10580:15;10573:32;10388:224;:::o;10618:366::-;10760:3;10781:67;10845:2;10840:3;10781:67;:::i;:::-;10774:74;;10857:93;10946:3;10857:93;:::i;:::-;10975:2;10970:3;10966:12;10959:19;;10618:366;;;:::o;10990:419::-;11156:4;11194:2;11183:9;11179:18;11171:26;;11243:9;11237:4;11233:20;11229:1;11218:9;11214:17;11207:47;11271:131;11397:4;11271:131;:::i;:::-;11263:139;;10990:419;;;:::o;11415:235::-;11555:34;11551:1;11543:6;11539:14;11532:58;11624:18;11619:2;11611:6;11607:15;11600:43;11415:235;:::o;11656:366::-;11798:3;11819:67;11883:2;11878:3;11819:67;:::i;:::-;11812:74;;11895:93;11984:3;11895:93;:::i;:::-;12013:2;12008:3;12004:12;11997:19;;11656:366;;;:::o;12028:419::-;12194:4;12232:2;12221:9;12217:18;12209:26;;12281:9;12275:4;12271:20;12267:1;12256:9;12252:17;12245:47;12309:131;12435:4;12309:131;:::i;:::-;12301:139;;12028:419;;;:::o;12453:225::-;12593:34;12589:1;12581:6;12577:14;12570:58;12662:8;12657:2;12649:6;12645:15;12638:33;12453:225;:::o;12684:366::-;12826:3;12847:67;12911:2;12906:3;12847:67;:::i;:::-;12840:74;;12923:93;13012:3;12923:93;:::i;:::-;13041:2;13036:3;13032:12;13025:19;;12684:366;;;:::o;13056:419::-;13222:4;13260:2;13249:9;13245:18;13237:26;;13309:9;13303:4;13299:20;13295:1;13284:9;13280:17;13273:47;13337:131;13463:4;13337:131;:::i;:::-;13329:139;;13056:419;;;:::o;13481:98::-;13532:6;13566:5;13560:12;13550:22;;13481:98;;;:::o;13585:147::-;13686:11;13723:3;13708:18;;13585:147;;;;:::o;13738:246::-;13819:1;13829:113;13843:6;13840:1;13837:13;13829:113;;;13928:1;13923:3;13919:11;13913:18;13909:1;13904:3;13900:11;13893:39;13865:2;13862:1;13858:10;13853:15;;13829:113;;;13976:1;13967:6;13962:3;13958:16;13951:27;13800:184;13738:246;;;:::o;13990:386::-;14094:3;14122:38;14154:5;14122:38;:::i;:::-;14176:88;14257:6;14252:3;14176:88;:::i;:::-;14169:95;;14273:65;14331:6;14326:3;14319:4;14312:5;14308:16;14273:65;:::i;:::-;14363:6;14358:3;14354:16;14347:23;;14098:278;13990:386;;;;:::o;14382:271::-;14512:3;14534:93;14623:3;14614:6;14534:93;:::i;:::-;14527:100;;14644:3;14637:10;;14382:271;;;;:::o;14659:179::-;14799:31;14795:1;14787:6;14783:14;14776:55;14659:179;:::o;14844:366::-;14986:3;15007:67;15071:2;15066:3;15007:67;:::i;:::-;15000:74;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14844:366;;;:::o;15216:419::-;15382:4;15420:2;15409:9;15405:18;15397:26;;15469:9;15463:4;15459:20;15455:1;15444:9;15440:17;15433:47;15497:131;15623:4;15497:131;:::i;:::-;15489:139;;15216:419;;;:::o;15641:99::-;15693:6;15727:5;15721:12;15711:22;;15641:99;;;:::o;15746:377::-;15834:3;15862:39;15895:5;15862:39;:::i;:::-;15917:71;15981:6;15976:3;15917:71;:::i;:::-;15910:78;;15997:65;16055:6;16050:3;16043:4;16036:5;16032:16;15997:65;:::i;:::-;16087:29;16109:6;16087:29;:::i;:::-;16082:3;16078:39;16071:46;;15838:285;15746:377;;;;:::o;16129:313::-;16242:4;16280:2;16269:9;16265:18;16257:26;;16329:9;16323:4;16319:20;16315:1;16304:9;16300:17;16293:47;16357:78;16430:4;16421:6;16357:78;:::i;:::-;16349:86;;16129:313;;;;:::o
Swarm Source
ipfs://5761fd36c6d9c3eff370e39ef47812289221c093a878e1e3910373c4927a6ec7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 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.