| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 25016691 | 143 days ago | 0 FRAX | |||||
| 25016691 | 143 days ago | 0 FRAX | |||||
| 25016691 | 143 days ago | 0 FRAX | |||||
| 25016691 | 143 days ago | 0 FRAX | |||||
| 25016691 | 143 days ago | 0 FRAX | |||||
| 25016691 | 143 days ago | 0 FRAX | |||||
| 23768827 | 172 days ago | 0 FRAX | |||||
| 23768827 | 172 days ago | 0 FRAX | |||||
| 23768827 | 172 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 23067965 | 188 days ago | 0 FRAX | |||||
| 19652189 | 268 days ago | 0 FRAX | |||||
| 19652189 | 268 days ago | 0 FRAX | |||||
| 19652189 | 268 days ago | 0 FRAX | |||||
| 19652189 | 268 days ago | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TransparentUpgradeableProxy
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)
pragma solidity ^0.8.0;
import "../ERC1967/ERC1967Proxy.sol";
/**
* @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}
* does not implement this interface directly, and some of its functions are implemented by an internal dispatch
* mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not
* include them in the ABI so this interface must be used to interact with it.
*/
interface ITransparentUpgradeableProxy is IERC1967 {
function admin() external view returns (address);
function implementation() external view returns (address);
function changeAdmin(address) external;
function upgradeTo(address) external;
function upgradeToAndCall(address, bytes memory) external payable;
}
/**
* @dev This contract implements a proxy that is upgradeable by an admin.
*
* To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
* clashing], which can potentially be used in an attack, this contract uses the
* https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
* things that go hand in hand:
*
* 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
* that call matches one of the admin functions exposed by the proxy itself.
* 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
* implementation. If the admin tries to call a function on the implementation it will fail with an error that says
* "admin cannot fallback to proxy target".
*
* These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
* the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
* to sudden errors when trying to call a function from the proxy implementation.
*
* Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
* you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.
*
* NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not
* inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch
* mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to
* fully implement transparency without decoding reverts caused by selector clashes between the proxy and the
* implementation.
*
* WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler
* will not check that there are no selector conflicts, due to the note above. A selector clash between any new function
* and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could
* render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.
*/
contract TransparentUpgradeableProxy is ERC1967Proxy {
/**
* @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
* optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
*/
constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {
_changeAdmin(admin_);
}
/**
* @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
*
* CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the
* implementation provides a function with the same selector.
*/
modifier ifAdmin() {
if (msg.sender == _getAdmin()) {
_;
} else {
_fallback();
}
}
/**
* @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior
*/
function _fallback() internal virtual override {
if (msg.sender == _getAdmin()) {
bytes memory ret;
bytes4 selector = msg.sig;
if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {
ret = _dispatchUpgradeTo();
} else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {
ret = _dispatchUpgradeToAndCall();
} else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {
ret = _dispatchChangeAdmin();
} else if (selector == ITransparentUpgradeableProxy.admin.selector) {
ret = _dispatchAdmin();
} else if (selector == ITransparentUpgradeableProxy.implementation.selector) {
ret = _dispatchImplementation();
} else {
revert("TransparentUpgradeableProxy: admin cannot fallback to proxy target");
}
assembly {
return(add(ret, 0x20), mload(ret))
}
} else {
super._fallback();
}
}
/**
* @dev Returns the current admin.
*
* TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
* https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
* `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
*/
function _dispatchAdmin() private returns (bytes memory) {
_requireZeroValue();
address admin = _getAdmin();
return abi.encode(admin);
}
/**
* @dev Returns the current implementation.
*
* TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
* https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
* `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
*/
function _dispatchImplementation() private returns (bytes memory) {
_requireZeroValue();
address implementation = _implementation();
return abi.encode(implementation);
}
/**
* @dev Changes the admin of the proxy.
*
* Emits an {AdminChanged} event.
*/
function _dispatchChangeAdmin() private returns (bytes memory) {
_requireZeroValue();
address newAdmin = abi.decode(msg.data[4:], (address));
_changeAdmin(newAdmin);
return "";
}
/**
* @dev Upgrade the implementation of the proxy.
*/
function _dispatchUpgradeTo() private returns (bytes memory) {
_requireZeroValue();
address newImplementation = abi.decode(msg.data[4:], (address));
_upgradeToAndCall(newImplementation, bytes(""), false);
return "";
}
/**
* @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
* by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
* proxied contract.
*/
function _dispatchUpgradeToAndCall() private returns (bytes memory) {
(address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));
_upgradeToAndCall(newImplementation, data, true);
return "";
}
/**
* @dev Returns the current admin.
*
* CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.
*/
function _admin() internal view virtual returns (address) {
return _getAdmin();
}
/**
* @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to
* emulate some proxy functions being non-payable while still allowing value to pass through.
*/
function _requireZeroValue() private {
require(msg.value == 0);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)
pragma solidity ^0.8.0;
import "../Proxy.sol";
import "./ERC1967Upgrade.sol";
/**
* @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
* implementation address that can be changed. This address is stored in storage in the location specified by
* https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
* implementation behind the proxy.
*/
contract ERC1967Proxy is Proxy, ERC1967Upgrade {
/**
* @dev Initializes the upgradeable proxy with an initial 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.
*/
constructor(address _logic, bytes memory _data) payable {
_upgradeToAndCall(_logic, _data, false);
}
/**
* @dev Returns the current implementation address.
*/
function _implementation() internal view virtual override returns (address impl) {
return ERC1967Upgrade._getImplementation();
}
}// 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 {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)
pragma solidity ^0.8.2;
import "../beacon/IBeacon.sol";
import "../../interfaces/IERC1967.sol";
import "../../interfaces/draft-IERC1822.sol";
import "../../utils/Address.sol";
import "../../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._
*/
abstract contract ERC1967Upgrade is IERC1967 {
// 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 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 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 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);
}
}
}// SPDX-License-Identifier: MIT
// 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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)
pragma solidity ^0.8.0;
/**
* @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.
*
* _Available since v4.8.3._
*/
interface IERC1967 {
/**
* @dev Emitted when the implementation is upgraded.
*/
event Upgraded(address indexed implementation);
/**
* @dev Emitted when the admin account has changed.
*/
event AdminChanged(address previousAdmin, address newAdmin);
/**
* @dev Emitted when the beacon is changed.
*/
event BeaconUpgraded(address indexed beacon);
}// SPDX-License-Identifier: MIT
// 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);
}// SPDX-License-Identifier: MIT
// 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 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
*
* 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);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
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:
* ```solidity
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
* }
* }
* ```
*
* _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._
* _Available since v4.9 for `string`, `bytes`._
*/
library StorageSlot {
struct AddressSlot {
address value;
}
struct BooleanSlot {
bool value;
}
struct Bytes32Slot {
bytes32 value;
}
struct Uint256Slot {
uint256 value;
}
struct StringSlot {
string value;
}
struct BytesSlot {
bytes value;
}
/**
* @dev Returns an `AddressSlot` with member `value` located at `slot`.
*/
function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BooleanSlot` with member `value` located at `slot`.
*/
function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
*/
function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Uint256Slot` with member `value` located at `slot`.
*/
function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `StringSlot` with member `value` located at `slot`.
*/
function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `StringSlot` representation of the string storage pointer `store`.
*/
function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := store.slot
}
}
/**
* @dev Returns an `BytesSlot` with member `value` located at `slot`.
*/
function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.
*/
function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := store.slot
}
}
}{
"remappings": [
"frax-std/=lib/frax-standard-solidity/src/",
"@eth-optimism/=lib/optimism/packages/",
"lib/optimism/packages/contracts-bedrock:src/=lib/optimism/packages/contracts-bedrock/src/",
"@openzeppelin-4/=node_modules/@openzeppelin-4/",
"@openzeppelin-5/=node_modules/@openzeppelin-5/",
"@openzeppelin/=node_modules/@openzeppelin/",
"@rari-capital/=node_modules/@rari-capital/",
"clones-with-immutable-args/=lib/optimism/packages/contracts-bedrock/lib/clones-with-immutable-args/src/",
"ds-test/=lib/frax-standard-solidity/lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/frax-standard-solidity/lib/forge-std/src/",
"frax-standard-solidity/=lib/frax-standard-solidity/src/",
"kontrol-cheatcodes/=lib/optimism/packages/contracts-bedrock/lib/kontrol-cheatcodes/src/",
"lib-keccak/=lib/optimism/packages/contracts-bedrock/lib/lib-keccak/contracts/",
"openzeppelin-contracts-upgradeable/=lib/optimism/packages/contracts-bedrock/lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/optimism/packages/contracts-bedrock/lib/openzeppelin-contracts/",
"optimism/=lib/optimism/",
"safe-contracts/=lib/optimism/packages/contracts-bedrock/lib/safe-contracts/contracts/",
"solady/=lib/optimism/packages/contracts-bedrock/lib/solady/",
"solidity-bytes-utils/=lib/frax-standard-solidity/lib/solidity-bytes-utils/",
"solmate/=lib/optimism/packages/contracts-bedrock/lib/solmate/src/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": false
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "london",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052366100135761001161001d565b005b61001b61001d565b005b610025610299565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361028f576060600080357fffffffff00000000000000000000000000000000000000000000000000000000169050633659cfe660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036100dc576100d56102f0565b9150610287565b634f1ef28660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101375761013061034f565b9150610286565b638f28397060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101925761018b61039c565b9150610285565b63f851a44060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101ed576101e66103e9565b9150610284565b635c60da1b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361024857610241610425565b9150610283565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027a906109c6565b60405180910390fd5b5b5b5b5b815160208301f35b610297610461565b565b60006102c77fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61047b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606102fa610485565b60008036600490809261030f939291906109fa565b81019061031c9190610a9d565b905061033981604051806020016040528060008152506000610494565b6040518060200160405280600081525091505090565b60606000806000366004908092610368939291906109fa565b8101906103759190610c10565b9150915061038582826001610494565b604051806020016040528060008152509250505090565b60606103a6610485565b6000803660049080926103bb939291906109fa565b8101906103c89190610a9d565b90506103d3816104c0565b6040518060200160405280600081525091505090565b60606103f3610485565b60006103fd610299565b9050806040516020016104109190610c8d565b60405160208183030381529060405291505090565b606061042f610485565b600061043961050c565b90508060405160200161044c9190610c8d565b60405160208183030381529060405291505090565b61046961051b565b61047961047461050c565b61051d565b565b6000819050919050565b6000341461049257600080fd5b565b61049d83610543565b6000825111806104aa5750805b156104bb576104b98383610592565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104e9610299565b826040516104f8929190610ca8565b60405180910390a1610509816105bf565b50565b600061051661069f565b905090565b565b3660008037600080366000845af43d6000803e806000811461053e573d6000f35b3d6000fd5b61054c816106f6565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606105b78383604051806060016040528060278152602001610f50602791396107af565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361062e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062590610d43565b60405180910390fd5b8061065b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61047b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006106cd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61047b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106ff81610835565b61073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073590610dd5565b60405180910390fd5b8061076b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61047b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516107d99190610e66565b600060405180830381855af49150503d8060008114610814576040519150601f19603f3d011682016040523d82523d6000602084013e610819565b606091505b509150915061082a86838387610858565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156108ba5760008351036108b25761087285610835565b6108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890610ec9565b60405180910390fd5b5b8290506108c5565b6108c483836108cd565b5b949350505050565b6000825111156108e05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109149190610f2d565b60405180910390fd5b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b60006109b060428361091d565b91506109bb8261092e565b606082019050919050565b600060208201905081810360008301526109df816109a3565b9050919050565b6000604051905090565b600080fd5b600080fd5b60008085851115610a0e57610a0d6109f0565b5b83861115610a1f57610a1e6109f5565b5b6001850283019150848603905094509492505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a6a82610a3f565b9050919050565b610a7a81610a5f565b8114610a8557600080fd5b50565b600081359050610a9781610a71565b92915050565b600060208284031215610ab357610ab2610a35565b5b6000610ac184828501610a88565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610b1d82610ad4565b810181811067ffffffffffffffff82111715610b3c57610b3b610ae5565b5b80604052505050565b6000610b4f6109e6565b9050610b5b8282610b14565b919050565b600067ffffffffffffffff821115610b7b57610b7a610ae5565b5b610b8482610ad4565b9050602081019050919050565b82818337600083830152505050565b6000610bb3610bae84610b60565b610b45565b905082815260208101848484011115610bcf57610bce610acf565b5b610bda848285610b91565b509392505050565b600082601f830112610bf757610bf6610aca565b5b8135610c07848260208601610ba0565b91505092915050565b60008060408385031215610c2757610c26610a35565b5b6000610c3585828601610a88565b925050602083013567ffffffffffffffff811115610c5657610c55610a3a565b5b610c6285828601610be2565b9150509250929050565b6000610c7782610a3f565b9050919050565b610c8781610c6c565b82525050565b6000602082019050610ca26000830184610c7e565b92915050565b6000604082019050610cbd6000830185610c7e565b610cca6020830184610c7e565b9392505050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610d2d60268361091d565b9150610d3882610cd1565b604082019050919050565b60006020820190508181036000830152610d5c81610d20565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000610dbf602d8361091d565b9150610dca82610d63565b604082019050919050565b60006020820190508181036000830152610dee81610db2565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015610e29578082015181840152602081019050610e0e565b60008484015250505050565b6000610e4082610df5565b610e4a8185610e00565b9350610e5a818560208601610e0b565b80840191505092915050565b6000610e728284610e35565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610eb3601d8361091d565b9150610ebe82610e7d565b602082019050919050565b60006020820190508181036000830152610ee281610ea6565b9050919050565b600081519050919050565b6000610eff82610ee9565b610f09818561091d565b9350610f19818560208601610e0b565b610f2281610ad4565b840191505092915050565b60006020820190508181036000830152610f478184610ef4565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564
Deployed Bytecode
0x6080604052366100135761001161001d565b005b61001b61001d565b005b610025610299565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361028f576060600080357fffffffff00000000000000000000000000000000000000000000000000000000169050633659cfe660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036100dc576100d56102f0565b9150610287565b634f1ef28660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101375761013061034f565b9150610286565b638f28397060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101925761018b61039c565b9150610285565b63f851a44060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036101ed576101e66103e9565b9150610284565b635c60da1b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361024857610241610425565b9150610283565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027a906109c6565b60405180910390fd5b5b5b5b5b815160208301f35b610297610461565b565b60006102c77fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61047b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606102fa610485565b60008036600490809261030f939291906109fa565b81019061031c9190610a9d565b905061033981604051806020016040528060008152506000610494565b6040518060200160405280600081525091505090565b60606000806000366004908092610368939291906109fa565b8101906103759190610c10565b9150915061038582826001610494565b604051806020016040528060008152509250505090565b60606103a6610485565b6000803660049080926103bb939291906109fa565b8101906103c89190610a9d565b90506103d3816104c0565b6040518060200160405280600081525091505090565b60606103f3610485565b60006103fd610299565b9050806040516020016104109190610c8d565b60405160208183030381529060405291505090565b606061042f610485565b600061043961050c565b90508060405160200161044c9190610c8d565b60405160208183030381529060405291505090565b61046961051b565b61047961047461050c565b61051d565b565b6000819050919050565b6000341461049257600080fd5b565b61049d83610543565b6000825111806104aa5750805b156104bb576104b98383610592565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104e9610299565b826040516104f8929190610ca8565b60405180910390a1610509816105bf565b50565b600061051661069f565b905090565b565b3660008037600080366000845af43d6000803e806000811461053e573d6000f35b3d6000fd5b61054c816106f6565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606105b78383604051806060016040528060278152602001610f50602791396107af565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361062e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062590610d43565b60405180910390fd5b8061065b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61047b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006106cd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61047b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106ff81610835565b61073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073590610dd5565b60405180910390fd5b8061076b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61047b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516107d99190610e66565b600060405180830381855af49150503d8060008114610814576040519150601f19603f3d011682016040523d82523d6000602084013e610819565b606091505b509150915061082a86838387610858565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156108ba5760008351036108b25761087285610835565b6108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890610ec9565b60405180910390fd5b5b8290506108c5565b6108c483836108cd565b5b949350505050565b6000825111156108e05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109149190610f2d565b60405180910390fd5b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b60006109b060428361091d565b91506109bb8261092e565b606082019050919050565b600060208201905081810360008301526109df816109a3565b9050919050565b6000604051905090565b600080fd5b600080fd5b60008085851115610a0e57610a0d6109f0565b5b83861115610a1f57610a1e6109f5565b5b6001850283019150848603905094509492505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a6a82610a3f565b9050919050565b610a7a81610a5f565b8114610a8557600080fd5b50565b600081359050610a9781610a71565b92915050565b600060208284031215610ab357610ab2610a35565b5b6000610ac184828501610a88565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610b1d82610ad4565b810181811067ffffffffffffffff82111715610b3c57610b3b610ae5565b5b80604052505050565b6000610b4f6109e6565b9050610b5b8282610b14565b919050565b600067ffffffffffffffff821115610b7b57610b7a610ae5565b5b610b8482610ad4565b9050602081019050919050565b82818337600083830152505050565b6000610bb3610bae84610b60565b610b45565b905082815260208101848484011115610bcf57610bce610acf565b5b610bda848285610b91565b509392505050565b600082601f830112610bf757610bf6610aca565b5b8135610c07848260208601610ba0565b91505092915050565b60008060408385031215610c2757610c26610a35565b5b6000610c3585828601610a88565b925050602083013567ffffffffffffffff811115610c5657610c55610a3a565b5b610c6285828601610be2565b9150509250929050565b6000610c7782610a3f565b9050919050565b610c8781610c6c565b82525050565b6000602082019050610ca26000830184610c7e565b92915050565b6000604082019050610cbd6000830185610c7e565b610cca6020830184610c7e565b9392505050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610d2d60268361091d565b9150610d3882610cd1565b604082019050919050565b60006020820190508181036000830152610d5c81610d20565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000610dbf602d8361091d565b9150610dca82610d63565b604082019050919050565b60006020820190508181036000830152610dee81610db2565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015610e29578082015181840152602081019050610e0e565b60008484015250505050565b6000610e4082610df5565b610e4a8185610e00565b9350610e5a818560208601610e0b565b80840191505092915050565b6000610e728284610e35565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610eb3601d8361091d565b9150610ebe82610e7d565b602082019050919050565b60006020820190508181036000830152610ee281610ea6565b9050919050565b600081519050919050565b6000610eff82610ee9565b610f09818561091d565b9350610f19818560208601610e0b565b610f2281610ad4565b840191505092915050565b60006020820190508181036000830152610f478184610ef4565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564
Deployed Bytecode Sourcemap
3389:4951:6:-:0;;;;;;2898:11:4;:9;:11::i;:::-;3389:4951:6;;2675:11:4;:9;:11::i;:::-;3389:4951:6;4407:1102;4482:11;:9;:11::i;:::-;4468:25;;:10;:25;;;4464:1039;;4509:16;4539:15;4557:7;;;;4539:25;;4594:47;;;4582:59;;;:8;:59;;;;4578:779;;4667:20;:18;:20::i;:::-;4661:26;;4578:779;;;4724:54;;;4712:66;;;:8;:66;;;;4708:649;;4804:27;:25;:27::i;:::-;4798:33;;4708:649;;;4868:49;;;4856:61;;;:8;:61;;;;4852:505;;4943:22;:20;:22::i;:::-;4937:28;;4852:505;;;5002:43;;;4990:55;;;:8;:55;;;;4986:371;;5071:16;:14;:16::i;:::-;5065:22;;4986:371;;;5124:52;;;5112:64;;;:8;:64;;;;5108:249;;5202:25;:23;:25::i;:::-;5196:31;;5108:249;;;5266:76;;;;;;;;;;:::i;:::-;;;;;;;;5108:249;4986:371;4852:505;4708:649;4578:779;5426:3;5420:10;5413:4;5408:3;5404:14;5397:34;4464:1039;5475:17;:15;:17::i;:::-;4407:1102::o;3784:122:3:-;3828:7;3854:39;3656:66;3881:11;;3854:26;:39::i;:::-;:45;;;;;;;;;;;;3847:52;;3784:122;:::o;6985:255:6:-;7032:12;7056:19;:17;:19::i;:::-;7086:25;7125:8;;7134:1;7125:12;;;;;;;;;:::i;:::-;7114:35;;;;;;;:::i;:::-;7086:63;;7159:54;7177:17;7196:9;;;;;;;;;;;;7207:5;7159:17;:54::i;:::-;7224:9;;;;;;;;;;;;;;;6985:255;:::o;7524:254::-;7578:12;7603:25;7630:17;7662:8;;7671:1;7662:12;;;;;;;;;:::i;:::-;7651:42;;;;;;;:::i;:::-;7602:91;;;;7703:48;7721:17;7740:4;7746;7703:17;:48::i;:::-;7762:9;;;;;;;;;;;;;;;;7524:254;:::o;6694:216::-;6743:12;6767:19;:17;:19::i;:::-;6797:16;6827:8;;6836:1;6827:12;;;;;;;;;:::i;:::-;6816:35;;;;;;;:::i;:::-;6797:54;;6861:22;6874:8;6861:12;:22::i;:::-;6894:9;;;;;;;;;;;;;;;6694:216;:::o;5860:165::-;5903:12;5927:19;:17;:19::i;:::-;5957:13;5973:11;:9;:11::i;:::-;5957:27;;6012:5;6001:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;5994:24;;;5860:165;:::o;6385:198::-;6437:12;6461:19;:17;:19::i;:::-;6491:22;6516:17;:15;:17::i;:::-;6491:42;;6561:14;6550:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;6543:33;;;6385:198;:::o;2322:110:4:-;2370:17;:15;:17::i;:::-;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;1859:190:8:-;1920:21;2029:4;2019:14;;1859:190;;;:::o;8261:77:6:-;8329:1;8316:9;:14;8308:23;;;;;;8261:77::o;2057:265:3:-;2165:29;2176:17;2165:10;:29::i;:::-;2222:1;2208:4;:11;:15;:28;;;;2227:9;2208:28;2204:112;;;2252:53;2281:17;2300:4;2252:28;:53::i;:::-;;2204:112;2057:265;;;:::o;4300:135::-;4364:35;4377:11;:9;:11::i;:::-;4390:8;4364:35;;;;;;;:::i;:::-;;;;;;;;4409:19;4419:8;4409:9;:19::i;:::-;4300:135;:::o;1148:140:2:-;1215:12;1246:35;:33;:35::i;:::-;1239:42;;1148:140;:::o;3198:46:4:-;:::o;948:895::-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1686:1;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;1771:152:3;1837:37;1856:17;1837:18;:37::i;:::-;1898:17;1889:27;;;;;;;;;;;;1771:152;:::o;6674:198:7:-;6757:12;6788:77;6809:6;6817:4;6788:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6781:84;;6674:198;;;;:::o;3988:201:3:-;4071:1;4051:22;;:8;:22;;;4043:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4174:8;4126:39;3656:66;4153:11;;4126:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;3988:201;:::o;1175:140::-;1228:7;1254:48;1030:66;1281:20;;1254:26;:48::i;:::-;:54;;;;;;;;;;;;1247:61;;1175:140;:::o;1406:259::-;1487:37;1506:17;1487:18;:37::i;:::-;1479:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1641:17;1584:48;1030:66;1611:20;;1584:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;1406:259;:::o;7058:325:7:-;7199:12;7224;7238:23;7265:6;:19;;7285:4;7265:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7223:67;;;;7307:69;7334:6;7342:7;7351:10;7363:12;7307:26;:69::i;:::-;7300:76;;;;7058:325;;;;;:::o;1412:320::-;1472:4;1724:1;1702:7;:19;;;:23;1695:30;;1412:320;;;:::o;7671:628::-;7851:12;7879:7;7875:418;;;7927:1;7906:10;:17;:22;7902:286;;8121:18;8132:6;8121:10;:18::i;:::-;8113:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7902:286;8208:10;8201:17;;;;7875:418;8249:33;8257:10;8269:12;8249:7;:33::i;:::-;7671:628;;;;;;;:::o;8821:540::-;9000:1;8980:10;:17;:21;8976:379;;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:169:9;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:290::-;322:34;318:1;310:6;306:14;299:58;391:34;386:2;378:6;374:15;367:59;460:4;455:2;447:6;443:15;436:29;182:290;:::o;478:366::-;620:3;641:67;705:2;700:3;641:67;:::i;:::-;634:74;;717:93;806:3;717:93;:::i;:::-;835:2;830:3;826:12;819:19;;478:366;;;:::o;850:419::-;1016:4;1054:2;1043:9;1039:18;1031:26;;1103:9;1097:4;1093:20;1089:1;1078:9;1074:17;1067:47;1131:131;1257:4;1131:131;:::i;:::-;1123:139;;850:419;;;:::o;1275:75::-;1308:6;1341:2;1335:9;1325:19;;1275:75;:::o;1356:117::-;1465:1;1462;1455:12;1479:117;1588:1;1585;1578:12;1602:469;1707:9;1718;1756:8;1744:10;1741:24;1738:111;;;1768:79;;:::i;:::-;1738:111;1874:6;1864:8;1861:20;1858:107;;;1884:79;;:::i;:::-;1858:107;2015:1;2003:10;1999:18;1991:6;1987:31;1974:44;;2054:10;2044:8;2040:25;2027:38;;1602:469;;;;;;;:::o;2077:117::-;2186:1;2183;2176:12;2200:117;2309:1;2306;2299:12;2323:126;2360:7;2400:42;2393:5;2389:54;2378:65;;2323:126;;;:::o;2455:104::-;2500:7;2529:24;2547:5;2529:24;:::i;:::-;2518:35;;2455:104;;;:::o;2565:138::-;2646:32;2672:5;2646:32;:::i;:::-;2639:5;2636:43;2626:71;;2693:1;2690;2683:12;2626:71;2565:138;:::o;2709:155::-;2763:5;2801:6;2788:20;2779:29;;2817:41;2852:5;2817:41;:::i;:::-;2709:155;;;;:::o;2870:345::-;2937:6;2986:2;2974:9;2965:7;2961:23;2957:32;2954:119;;;2992:79;;:::i;:::-;2954:119;3112:1;3137:61;3190:7;3181:6;3170:9;3166:22;3137:61;:::i;:::-;3127:71;;3083:125;2870:345;;;;:::o;3221:117::-;3330:1;3327;3320:12;3344:117;3453:1;3450;3443:12;3467:102;3508:6;3559:2;3555:7;3550:2;3543:5;3539:14;3535:28;3525:38;;3467:102;;;:::o;3575:180::-;3623:77;3620:1;3613:88;3720:4;3717:1;3710:15;3744:4;3741:1;3734:15;3761:281;3844:27;3866:4;3844:27;:::i;:::-;3836:6;3832:40;3974:6;3962:10;3959:22;3938:18;3926:10;3923:34;3920:62;3917:88;;;3985:18;;:::i;:::-;3917:88;4025:10;4021:2;4014:22;3804:238;3761:281;;:::o;4048:129::-;4082:6;4109:20;;:::i;:::-;4099:30;;4138:33;4166:4;4158:6;4138:33;:::i;:::-;4048:129;;;:::o;4183:307::-;4244:4;4334:18;4326:6;4323:30;4320:56;;;4356:18;;:::i;:::-;4320:56;4394:29;4416:6;4394:29;:::i;:::-;4386:37;;4478:4;4472;4468:15;4460:23;;4183:307;;;:::o;4496:146::-;4593:6;4588:3;4583;4570:30;4634:1;4625:6;4620:3;4616:16;4609:27;4496:146;;;:::o;4648:423::-;4725:5;4750:65;4766:48;4807:6;4766:48;:::i;:::-;4750:65;:::i;:::-;4741:74;;4838:6;4831:5;4824:21;4876:4;4869:5;4865:16;4914:3;4905:6;4900:3;4896:16;4893:25;4890:112;;;4921:79;;:::i;:::-;4890:112;5011:54;5058:6;5053:3;5048;5011:54;:::i;:::-;4731:340;4648:423;;;;;:::o;5090:338::-;5145:5;5194:3;5187:4;5179:6;5175:17;5171:27;5161:122;;5202:79;;:::i;:::-;5161:122;5319:6;5306:20;5344:78;5418:3;5410:6;5403:4;5395:6;5391:17;5344:78;:::i;:::-;5335:87;;5151:277;5090:338;;;;:::o;5434:668::-;5519:6;5527;5576:2;5564:9;5555:7;5551:23;5547:32;5544:119;;;5582:79;;:::i;:::-;5544:119;5702:1;5727:61;5780:7;5771:6;5760:9;5756:22;5727:61;:::i;:::-;5717:71;;5673:125;5865:2;5854:9;5850:18;5837:32;5896:18;5888:6;5885:30;5882:117;;;5918:79;;:::i;:::-;5882:117;6023:62;6077:7;6068:6;6057:9;6053:22;6023:62;:::i;:::-;6013:72;;5808:287;5434:668;;;;;:::o;6108:96::-;6145:7;6174:24;6192:5;6174:24;:::i;:::-;6163:35;;6108:96;;;:::o;6210:118::-;6297:24;6315:5;6297:24;:::i;:::-;6292:3;6285:37;6210:118;;:::o;6334:222::-;6427:4;6465:2;6454:9;6450:18;6442:26;;6478:71;6546:1;6535:9;6531:17;6522:6;6478:71;:::i;:::-;6334:222;;;;:::o;6562:332::-;6683:4;6721:2;6710:9;6706:18;6698:26;;6734:71;6802:1;6791:9;6787:17;6778:6;6734:71;:::i;:::-;6815:72;6883:2;6872:9;6868:18;6859:6;6815:72;:::i;:::-;6562:332;;;;;:::o;6900:225::-;7040:34;7036:1;7028:6;7024:14;7017:58;7109:8;7104:2;7096:6;7092:15;7085:33;6900:225;:::o;7131:366::-;7273:3;7294:67;7358:2;7353:3;7294:67;:::i;:::-;7287:74;;7370:93;7459:3;7370:93;:::i;:::-;7488:2;7483:3;7479:12;7472:19;;7131:366;;;:::o;7503:419::-;7669:4;7707:2;7696:9;7692:18;7684:26;;7756:9;7750:4;7746:20;7742:1;7731:9;7727:17;7720:47;7784:131;7910:4;7784:131;:::i;:::-;7776:139;;7503:419;;;:::o;7928:232::-;8068:34;8064:1;8056:6;8052:14;8045:58;8137:15;8132:2;8124:6;8120:15;8113:40;7928:232;:::o;8166:366::-;8308:3;8329:67;8393:2;8388:3;8329:67;:::i;:::-;8322:74;;8405:93;8494:3;8405:93;:::i;:::-;8523:2;8518:3;8514:12;8507:19;;8166:366;;;:::o;8538:419::-;8704:4;8742:2;8731:9;8727:18;8719:26;;8791:9;8785:4;8781:20;8777:1;8766:9;8762:17;8755:47;8819:131;8945:4;8819:131;:::i;:::-;8811:139;;8538:419;;;:::o;8963:98::-;9014:6;9048:5;9042:12;9032:22;;8963:98;;;:::o;9067:147::-;9168:11;9205:3;9190:18;;9067:147;;;;:::o;9220:246::-;9301:1;9311:113;9325:6;9322:1;9319:13;9311:113;;;9410:1;9405:3;9401:11;9395:18;9391:1;9386:3;9382:11;9375:39;9347:2;9344:1;9340:10;9335:15;;9311:113;;;9458:1;9449:6;9444:3;9440:16;9433:27;9282:184;9220:246;;;:::o;9472:386::-;9576:3;9604:38;9636:5;9604:38;:::i;:::-;9658:88;9739:6;9734:3;9658:88;:::i;:::-;9651:95;;9755:65;9813:6;9808:3;9801:4;9794:5;9790:16;9755:65;:::i;:::-;9845:6;9840:3;9836:16;9829:23;;9580:278;9472:386;;;;:::o;9864:271::-;9994:3;10016:93;10105:3;10096:6;10016:93;:::i;:::-;10009:100;;10126:3;10119:10;;9864:271;;;;:::o;10141:179::-;10281:31;10277:1;10269:6;10265:14;10258:55;10141:179;:::o;10326:366::-;10468:3;10489:67;10553:2;10548:3;10489:67;:::i;:::-;10482:74;;10565:93;10654:3;10565:93;:::i;:::-;10683:2;10678:3;10674:12;10667:19;;10326:366;;;:::o;10698:419::-;10864:4;10902:2;10891:9;10887:18;10879:26;;10951:9;10945:4;10941:20;10937:1;10926:9;10922:17;10915:47;10979:131;11105:4;10979:131;:::i;:::-;10971:139;;10698:419;;;:::o;11123:99::-;11175:6;11209:5;11203:12;11193:22;;11123:99;;;:::o;11228:377::-;11316:3;11344:39;11377:5;11344:39;:::i;:::-;11399:71;11463:6;11458:3;11399:71;:::i;:::-;11392:78;;11479:65;11537:6;11532:3;11525:4;11518:5;11514:16;11479:65;:::i;:::-;11569:29;11591:6;11569:29;:::i;:::-;11564:3;11560:39;11553:46;;11320:285;11228:377;;;;:::o;11611:313::-;11724:4;11762:2;11751:9;11747:18;11739:26;;11811:9;11805:4;11801:20;11797:1;11786:9;11782:17;11775:47;11839:78;11912:4;11903:6;11839:78;:::i;:::-;11831:86;;11611:313;;;;:::o
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.