Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 721 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24217614 | 44 mins ago | IN | 0 ETH | 0.00011621 | ||||
| Approve | 24216835 | 3 hrs ago | IN | 0 ETH | 0.00000134 | ||||
| Approve | 24216089 | 5 hrs ago | IN | 0 ETH | 0.00000264 | ||||
| Approve | 24216040 | 6 hrs ago | IN | 0 ETH | 0.00005221 | ||||
| Approve | 24215765 | 6 hrs ago | IN | 0 ETH | 0.00000245 | ||||
| Approve | 24215672 | 7 hrs ago | IN | 0 ETH | 0.00000222 | ||||
| Approve | 24215649 | 7 hrs ago | IN | 0 ETH | 0.00000217 | ||||
| Approve | 24215341 | 8 hrs ago | IN | 0 ETH | 0.00002988 | ||||
| Approve | 24214109 | 12 hrs ago | IN | 0 ETH | 0.00011381 | ||||
| Approve | 24213200 | 15 hrs ago | IN | 0 ETH | 0.00000189 | ||||
| Approve | 24212703 | 17 hrs ago | IN | 0 ETH | 0.00000519 | ||||
| Approve | 24212446 | 18 hrs ago | IN | 0 ETH | 0.0000028 | ||||
| Approve | 24212433 | 18 hrs ago | IN | 0 ETH | 0.000002 | ||||
| Approve | 24211474 | 21 hrs ago | IN | 0 ETH | 0.0000018 | ||||
| Approve | 24210921 | 23 hrs ago | IN | 0 ETH | 0.00005227 | ||||
| Approve | 24210741 | 23 hrs ago | IN | 0 ETH | 0.00000173 | ||||
| Approve | 24209481 | 27 hrs ago | IN | 0 ETH | 0.0000022 | ||||
| Approve | 24209446 | 28 hrs ago | IN | 0 ETH | 0.00011372 | ||||
| Approve | 24206859 | 36 hrs ago | IN | 0 ETH | 0.00005764 | ||||
| Approve | 24206852 | 36 hrs ago | IN | 0 ETH | 0.00005786 | ||||
| Approve | 24205332 | 41 hrs ago | IN | 0 ETH | 0.00000203 | ||||
| Approve | 24204736 | 43 hrs ago | IN | 0 ETH | 0.0000018 | ||||
| Approve | 24204428 | 44 hrs ago | IN | 0 ETH | 0.00000287 | ||||
| Approve | 24204392 | 45 hrs ago | IN | 0 ETH | 0.00000192 | ||||
| Approve | 24203666 | 47 hrs ago | IN | 0 ETH | 0.0000025 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 23625168 | 82 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TransparentUpgradeableProxy
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-10-21
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0 ^0.8.1 ^0.8.2;
// lib/open-zeppelin/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
/**
* @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.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);
}
}
}
// lib/open-zeppelin/proxy/beacon/IBeacon.sol
// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)
/**
* @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);
}
// lib/open-zeppelin/proxy/Proxy.sol
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)
/**
* @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 {}
}
// lib/open-zeppelin/utils/StorageSlot.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
/**
* @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
}
}
}
// lib/open-zeppelin/interfaces/draft-IERC1822.sol
// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)
/**
* @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);
}
// lib/open-zeppelin/proxy/ERC1967/ERC1967Upgrade.sol
// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.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 {
// 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);
}
}
}
// lib/open-zeppelin/proxy/ERC1967/ERC1967Proxy.sol
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.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();
}
}
// lib/open-zeppelin/proxy/transparent/TransparentUpgradeableProxy.sol
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)
/**
* @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.
*/
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.
*/
modifier ifAdmin() {
if (msg.sender == _getAdmin()) {
_;
} else {
_fallback();
}
}
/**
* @dev Returns the current admin.
*
* NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
*
* 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 admin() external payable ifAdmin returns (address admin_) {
_requireZeroValue();
admin_ = _getAdmin();
}
/**
* @dev Returns the current implementation.
*
* NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
*
* 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 implementation() external payable ifAdmin returns (address implementation_) {
_requireZeroValue();
implementation_ = _implementation();
}
/**
* @dev Changes the admin of the proxy.
*
* Emits an {AdminChanged} event.
*
* NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
*/
function changeAdmin(address newAdmin) external payable virtual ifAdmin {
_requireZeroValue();
_changeAdmin(newAdmin);
}
/**
* @dev Upgrade the implementation of the proxy.
*
* NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
*/
function upgradeTo(address newImplementation) external payable ifAdmin {
_requireZeroValue();
_upgradeToAndCall(newImplementation, bytes(""), false);
}
/**
* @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.
*
* NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
*/
function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
_upgradeToAndCall(newImplementation, data, true);
}
/**
* @dev Returns the current admin.
*/
function _admin() internal view virtual returns (address) {
return _getAdmin();
}
/**
* @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
*/
function _beforeFallback() internal virtual override {
require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
super._beforeFallback();
}
/**
* @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);
}
}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"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052604051610d04380380610d04833981016040819052610022916103c3565b828161002f82825f610043565b5061003b90508261006e565b5050506104df565b61004c836100db565b5f825111806100585750805b1561006957610067838361011a565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100ad5f80516020610cbd833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a16100d881610146565b50565b6100e4816101e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061013f8383604051806060016040528060278152602001610cdd60279139610275565b9392505050565b6001600160a01b0381166101b05760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f80516020610cbd8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61024e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101c0565b60605f80856001600160a01b0316856040516102919190610494565b5f60405180830381855af49150503d805f81146102c9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ce565b606091505b5090925090506102e0868383876102ea565b9695505050505050565b606083156103585782515f03610351576001600160a01b0385163b6103515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b5081610362565b610362838361036a565b949350505050565b81511561037a5781518083602001fd5b8060405162461bcd60e51b81526004016101a791906104aa565b80516001600160a01b03811681146103aa575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156103d5575f80fd5b6103de84610394565b92506103ec60208501610394565b60408501519092506001600160401b03811115610407575f80fd5b8401601f81018613610417575f80fd5b80516001600160401b03811115610430576104306103af565b604051601f8201601f19908116603f011681016001600160401b038111828210171561045e5761045e6103af565b604052818152828201602001881015610475575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6107d1806104ec5f395ff3fe60806040526004361061004d575f3560e01c80633659cfe6146100645780634f1ef286146100775780635c60da1b1461008a5780638f283970146100ae578063f851a440146100c15761005c565b3661005c5761005a6100c9565b005b61005a6100c9565b61005a610072366004610692565b6100e3565b61005a6100853660046106ab565b610126565b61009261018c565b6040516001600160a01b03909116815260200160405180910390f35b61005a6100bc366004610692565b6101c4565b6100926101ec565b6100d1610214565b6100e16100dc6102a9565b6102b2565b565b6100eb6102d0565b6001600160a01b0316330361011e57610102610302565b61011b8160405180602001604052805f8152505f61030c565b50565b61011b6100c9565b61012e6102d0565b6001600160a01b031633036101845761017f8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506001925061030c915050565b505050565b61017f6100c9565b5f6101956102d0565b6001600160a01b031633036101b9576101ac610302565b6101b46102a9565b905090565b6101c16100c9565b90565b6101cc6102d0565b6001600160a01b0316330361011e576101e3610302565b61011b81610336565b5f6101f56102d0565b6001600160a01b031633036101b95761020c610302565b6101b46102d0565b61021c6102d0565b6001600160a01b031633036100e15760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b5f6101b461038a565b365f80375f80365f845af43d5f803e8080156102cc573d5ff35b3d5ffd5b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b34156100e1575f80fd5b610315836103b1565b5f825111806103215750805b1561017f5761033083836103f0565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035f6102d0565b604080516001600160a01b03928316815291841660208301520160405180910390a161011b8161041c565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102f3565b6103ba816104c5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610415838360405180606001604052806027815260200161077560279139610559565b9392505050565b6001600160a01b0381166104815760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a0565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105325760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102a0565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104a4565b60605f80856001600160a01b0316856040516105759190610729565b5f60405180830381855af49150503d805f81146105ad576040519150601f19603f3d011682016040523d82523d5f602084013e6105b2565b606091505b50915091506105c3868383876105cd565b9695505050505050565b6060831561063b5782515f03610634576001600160a01b0385163b6106345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a0565b5081610645565b610645838361064d565b949350505050565b81511561065d5781518083602001fd5b8060405162461bcd60e51b81526004016102a0919061073f565b80356001600160a01b038116811461068d575f80fd5b919050565b5f602082840312156106a2575f80fd5b61041582610677565b5f805f604084860312156106bd575f80fd5b6106c684610677565b9250602084013567ffffffffffffffff8111156106e1575f80fd5b8401601f810186136106f1575f80fd5b803567ffffffffffffffff811115610707575f80fd5b866020828401011115610718575f80fd5b939660209190910195509293505050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220244ae7aa11a73f909022b1cbbd83d7e1609d3384e2b43f0c45f3ca67c301d74664736f6c634300081a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000006b1f6e41d5b643fb54646887e62e636a9c159e40000000000000000000000000700318540505bde5cbb6548886f1e24529b1617c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010442fe0980000000000000000000000000eb79e23ff4cc1ae1ecb3b0e149bbbfd0699c4db00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000675704e5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c55707368696674204e555344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061004d575f3560e01c80633659cfe6146100645780634f1ef286146100775780635c60da1b1461008a5780638f283970146100ae578063f851a440146100c15761005c565b3661005c5761005a6100c9565b005b61005a6100c9565b61005a610072366004610692565b6100e3565b61005a6100853660046106ab565b610126565b61009261018c565b6040516001600160a01b03909116815260200160405180910390f35b61005a6100bc366004610692565b6101c4565b6100926101ec565b6100d1610214565b6100e16100dc6102a9565b6102b2565b565b6100eb6102d0565b6001600160a01b0316330361011e57610102610302565b61011b8160405180602001604052805f8152505f61030c565b50565b61011b6100c9565b61012e6102d0565b6001600160a01b031633036101845761017f8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506001925061030c915050565b505050565b61017f6100c9565b5f6101956102d0565b6001600160a01b031633036101b9576101ac610302565b6101b46102a9565b905090565b6101c16100c9565b90565b6101cc6102d0565b6001600160a01b0316330361011e576101e3610302565b61011b81610336565b5f6101f56102d0565b6001600160a01b031633036101b95761020c610302565b6101b46102d0565b61021c6102d0565b6001600160a01b031633036100e15760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b5f6101b461038a565b365f80375f80365f845af43d5f803e8080156102cc573d5ff35b3d5ffd5b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b34156100e1575f80fd5b610315836103b1565b5f825111806103215750805b1561017f5761033083836103f0565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035f6102d0565b604080516001600160a01b03928316815291841660208301520160405180910390a161011b8161041c565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102f3565b6103ba816104c5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610415838360405180606001604052806027815260200161077560279139610559565b9392505050565b6001600160a01b0381166104815760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a0565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105325760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102a0565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104a4565b60605f80856001600160a01b0316856040516105759190610729565b5f60405180830381855af49150503d805f81146105ad576040519150601f19603f3d011682016040523d82523d5f602084013e6105b2565b606091505b50915091506105c3868383876105cd565b9695505050505050565b6060831561063b5782515f03610634576001600160a01b0385163b6106345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a0565b5081610645565b610645838361064d565b949350505050565b81511561065d5781518083602001fd5b8060405162461bcd60e51b81526004016102a0919061073f565b80356001600160a01b038116811461068d575f80fd5b919050565b5f602082840312156106a2575f80fd5b61041582610677565b5f805f604084860312156106bd575f80fd5b6106c684610677565b9250602084013567ffffffffffffffff8111156106e1575f80fd5b8401601f810186136106f1575f80fd5b803567ffffffffffffffff811115610707575f80fd5b866020828401011115610718575f80fd5b939660209190910195509293505050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220244ae7aa11a73f909022b1cbbd83d7e1609d3384e2b43f0c45f3ca67c301d74664736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b1f6e41d5b643fb54646887e62e636a9c159e40000000000000000000000000700318540505bde5cbb6548886f1e24529b1617c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010442fe0980000000000000000000000000eb79e23ff4cc1ae1ecb3b0e149bbbfd0699c4db00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000675704e5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c55707368696674204e555344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _logic (address): 0x6B1F6E41d5B643FB54646887E62E636a9c159e40
Arg [1] : admin_ (address): 0x700318540505BdE5cbb6548886F1E24529B1617C
Arg [2] : _data (bytes): 0x42fe0980000000000000000000000000eb79e23ff4cc1ae1ecb3b0e149bbbfd0699c4db00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000675704e5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c55707368696674204e5553440000000000000000000000000000000000000000
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b1f6e41d5b643fb54646887e62e636a9c159e40
Arg [1] : 000000000000000000000000700318540505bde5cbb6548886f1e24529b1617c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000104
Arg [4] : 42fe0980000000000000000000000000eb79e23ff4cc1ae1ecb3b0e149bbbfd0
Arg [5] : 699c4db000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000001200000000000000000000000000000000000000000000000000000000
Arg [7] : 0000008000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000c000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000675704e55534400000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000c55707368696674204e55534400000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
27864:4004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13077:11;:9;:11::i;:::-;27864:4004;;12846:11;:9;:11::i;30321:174::-;;;;;;:::i;:::-;;:::i;30880:166::-;;;;;;:::i;:::-;;:::i;29628:169::-;;;:::i;:::-;;;-1:-1:-1;;;;;1212:32:1;;;1194:51;;1182:2;1167:18;29628:169:0;;;;;;;30011:143;;;;;;:::i;:::-;;:::i;29021:136::-;;;:::i;12483:113::-;12532:17;:15;:17::i;:::-;12560:28;12570:17;:15;:17::i;:::-;12560:9;:28::i;:::-;12483:113::o;30321:174::-;28476:11;:9;:11::i;:::-;-1:-1:-1;;;;;28462:25:0;:10;:25;28458:103;;30403:19:::1;:17;:19::i;:::-;30433:54;30451:17;30470:9;;;;;;;;;;;::::0;30481:5:::1;30433:17;:54::i;:::-;30321:174:::0;:::o;28458:103::-;28538:11;:9;:11::i;30880:166::-;28476:11;:9;:11::i;:::-;-1:-1:-1;;;;;28462:25:0;:10;:25;28458:103;;30990:48:::1;31008:17;31027:4;;30990:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31033:4:0::1;::::0;-1:-1:-1;30990:17:0::1;::::0;-1:-1:-1;;30990:48:0:i:1;:::-;30880:166:::0;;;:::o;28458:103::-;28538:11;:9;:11::i;29628:169::-;29688:23;28476:11;:9;:11::i;:::-;-1:-1:-1;;;;;28462:25:0;:10;:25;28458:103;;29724:19:::1;:17;:19::i;:::-;29772:17;:15;:17::i;:::-;29754:35;;29628:169:::0;:::o;28458:103::-;28538:11;:9;:11::i;:::-;29628:169;:::o;30011:143::-;28476:11;:9;:11::i;:::-;-1:-1:-1;;;;;28462:25:0;:10;:25;28458:103;;30094:19:::1;:17;:19::i;:::-;30124:22;30137:8;30124:12;:22::i;29021:136::-:0;29072:14;28476:11;:9;:11::i;:::-;-1:-1:-1;;;;;28462:25:0;:10;:25;28458:103;;29099:19:::1;:17;:19::i;:::-;29138:11;:9;:11::i;31333:210::-:0;31419:11;:9;:11::i;:::-;-1:-1:-1;;;;;31405:25:0;:10;:25;31397:104;;;;-1:-1:-1;;;31397:104:0;;1458:2:1;31397:104:0;;;1440:21:1;1497:2;1477:18;;;1470:30;1536:34;1516:18;;;1509:62;1607:34;1587:18;;;1580:62;-1:-1:-1;;;1658:19:1;;;1651:33;1701:19;;31397:104:0;;;;;;;;26065:142;26132:12;26164:35;:33;:35::i;11073:918::-;11416:14;11413:1;11410;11397:34;11634:1;11631;11615:14;11612:1;11596:14;11589:5;11576:60;11713:16;11710:1;11707;11692:38;11753:6;11822:68;;;;11941:16;11938:1;11931:27;11822:68;11858:16;11855:1;11848:27;22508:124;22552:7;22232:66;22579:39;:45;-1:-1:-1;;;;;22579:45:0;;22508:124;-1:-1:-1;22508:124:0:o;31786:79::-;31842:9;:14;31834:23;;;;;20600:270;20709:29;20720:17;20709:10;:29::i;:::-;20767:1;20753:4;:11;:15;:28;;;;20772:9;20753:28;20749:114;;;20798:53;20827:17;20846:4;20798:28;:53::i;:::-;;20600:270;;;:::o;23041:138::-;23106:35;23119:11;:9;:11::i;:::-;23106:35;;;-1:-1:-1;;;;;1923:32:1;;;1905:51;;1992:32;;;1987:2;1972:18;;1965:60;1878:18;23106:35:0;;;;;;;23152:19;23162:8;23152:9;:19::i;19691:142::-;19744:7;19410:66;19771:48;15345:195;20304:155;20371:37;20390:17;20371:18;:37::i;:::-;20424:27;;-1:-1:-1;;;;;20424:27:0;;;;;;;;20304:155;:::o;6900:200::-;6983:12;7015:77;7036:6;7044:4;7015:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;7008:84;6900:200;-1:-1:-1;;;6900:200:0:o;22719:204::-;-1:-1:-1;;;;;22783:22:0;;22775:73;;;;-1:-1:-1;;;22775:73:0;;2238:2:1;22775:73:0;;;2220:21:1;2277:2;2257:18;;;2250:30;2316:34;2296:18;;;2289:62;-1:-1:-1;;;2367:18:1;;;2360:36;2413:19;;22775:73:0;2036:402:1;22775:73:0;22907:8;22232:66;22859:39;:56;;-1:-1:-1;;;;;;22859:56:0;-1:-1:-1;;;;;22859:56:0;;;;;;;;;;-1:-1:-1;22719:204:0:o;19929:262::-;-1:-1:-1;;;;;1802:19:0;;;20003:95;;;;-1:-1:-1;;;20003:95:0;;2645:2:1;20003:95:0;;;2627:21:1;2684:2;2664:18;;;2657:30;2723:34;2703:18;;;2696:62;-1:-1:-1;;;2774:18:1;;;2767:43;2827:19;;20003:95:0;2443:409:1;20003:95:0;20166:17;19410:66;20109:48;15345:195;7294:332;7439:12;7465;7479:23;7506:6;-1:-1:-1;;;;;7506:19:0;7526:4;7506:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7464:67;;;;7549:69;7576:6;7584:7;7593:10;7605:12;7549:26;:69::i;:::-;7542:76;7294:332;-1:-1:-1;;;;;;7294:332:0:o;7922:644::-;8107:12;8136:7;8132:427;;;8164:10;:17;8185:1;8164:22;8160:290;;-1:-1:-1;;;;;1802:19:0;;;8374:60;;;;-1:-1:-1;;;8374:60:0;;3365:2:1;8374:60:0;;;3347:21:1;3404:2;3384:18;;;3377:30;3443:31;3423:18;;;3416:59;3492:18;;8374:60:0;3163:353:1;8374:60:0;-1:-1:-1;8471:10:0;8464:17;;8132:427;8514:33;8522:10;8534:12;8514:7;:33::i;:::-;7922:644;;;;;;:::o;9108:552::-;9269:17;;:21;9265:388;;9501:10;9495:17;9558:15;9545:10;9541:2;9537:19;9530:44;9265:388;9628:12;9621:20;;-1:-1:-1;;;9621:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:660::-;462:6;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;570:29;589:9;570:29;:::i;:::-;560:39;;650:2;639:9;635:18;622:32;677:18;669:6;666:30;663:50;;;709:1;706;699:12;663:50;732:22;;785:4;777:13;;773:27;-1:-1:-1;763:55:1;;814:1;811;804:12;763:55;854:2;841:16;880:18;872:6;869:30;866:50;;;912:1;909;902:12;866:50;957:7;952:2;943:6;939:2;935:15;931:24;928:37;925:57;;;978:1;975;968:12;925:57;383:660;;1009:2;1001:11;;;;;-1:-1:-1;1031:6:1;;-1:-1:-1;;;383:660:1:o;2857:301::-;2986:3;3024:6;3018:13;3070:6;3063:4;3055:6;3051:17;3046:3;3040:37;3132:1;3096:16;;3121:13;;;-1:-1:-1;3096:16:1;2857:301;-1:-1:-1;2857:301:1:o;3521:418::-;3670:2;3659:9;3652:21;3633:4;3702:6;3696:13;3745:6;3740:2;3729:9;3725:18;3718:34;3804:6;3799:2;3791:6;3787:15;3782:2;3771:9;3767:18;3761:50;3860:1;3855:2;3846:6;3835:9;3831:22;3827:31;3820:42;3930:2;3923;3919:7;3914:2;3906:6;3902:15;3898:29;3887:9;3883:45;3879:54;3871:62;;;3521:418;;;;:::o
Swarm Source
ipfs://244ae7aa11a73f909022b1cbbd83d7e1609d3384e2b43f0c45f3ca67c301d746
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.