ETH Price: $1,948.64 (-6.71%)

Contract

0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Transaction Hash
Block
From
To
Approve4324763752026-02-15 20:58:3814 secs ago1771189118IN
Arbitrum: USDC Token
0 ETH0.000001210.020142
Approve4324761332026-02-15 20:57:391 min ago1771189059IN
Arbitrum: USDC Token
0 ETH0.00000120.02
Approve4324760652026-02-15 20:57:221 min ago1771189042IN
Arbitrum: USDC Token
0 ETH0.00000120.02
Approve4324757452026-02-15 20:56:022 mins ago1771188962IN
Arbitrum: USDC Token
0 ETH0.00000120.020094
Approve4324757402026-02-15 20:56:002 mins ago1771188960IN
Arbitrum: USDC Token
0 ETH0.00000120.020128
Approve4324755252026-02-15 20:55:073 mins ago1771188907IN
Arbitrum: USDC Token
0 ETH0.00000120.020116
Approve4324755232026-02-15 20:55:063 mins ago1771188906IN
Arbitrum: USDC Token
0 ETH0.00000120.020034
Approve4324753472026-02-15 20:54:224 mins ago1771188862IN
Arbitrum: USDC Token
0 ETH0.00000120.020028
Approve4324753442026-02-15 20:54:214 mins ago1771188861IN
Arbitrum: USDC Token
0 ETH0.00000120.020082
Transfer4324752822026-02-15 20:54:064 mins ago1771188846IN
Arbitrum: USDC Token
0 ETH0.000001310.02012
Approve4324750882026-02-15 20:53:175 mins ago1771188797IN
Arbitrum: USDC Token
0 ETH0.00000120.02004
Approve4324750852026-02-15 20:53:165 mins ago1771188796IN
Arbitrum: USDC Token
0 ETH0.00000120.020078
Approve4324747472026-02-15 20:51:527 mins ago1771188712IN
Arbitrum: USDC Token
0 ETH0.000001210.020278
Approve4324747452026-02-15 20:51:517 mins ago1771188711IN
Arbitrum: USDC Token
0 ETH0.00000120.020062
Transfer4324745652026-02-15 20:51:087 mins ago1771188668IN
Arbitrum: USDC Token
0 ETH0.000000870.020096
Approve4324744392026-02-15 20:50:378 mins ago1771188637IN
Arbitrum: USDC Token
0 ETH0.00000120.02
Approve4324744302026-02-15 20:50:358 mins ago1771188635IN
Arbitrum: USDC Token
0 ETH0.000001220.02037
Approve4324743992026-02-15 20:50:278 mins ago1771188627IN
Arbitrum: USDC Token
0 ETH0.00000120.02
Approve4324740832026-02-15 20:49:089 mins ago1771188548IN
Arbitrum: USDC Token
0 ETH0.00000120.020122
Approve4324740752026-02-15 20:49:069 mins ago1771188546IN
Arbitrum: USDC Token
0 ETH0.000001210.020208
Approve4324739422026-02-15 20:48:3210 mins ago1771188512IN
Arbitrum: USDC Token
0 ETH0.000001210.02019
Approve4324736872026-02-15 20:47:2811 mins ago1771188448IN
Arbitrum: USDC Token
0 ETH0.000001210.02024
Approve4324736722026-02-15 20:47:2511 mins ago1771188445IN
Arbitrum: USDC Token
0 ETH0.00000120.020114
Approve4324734222026-02-15 20:46:2212 mins ago1771188382IN
Arbitrum: USDC Token
0 ETH0.00000120.020066
Approve4324734172026-02-15 20:46:2112 mins ago1771188381IN
Arbitrum: USDC Token
0 ETH0.00000120.02
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
2097237662024-05-10 6:39:59646 days ago1715323199
Arbitrum: USDC Token
0.017 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
720866702023-03-21 10:18:481062 days ago1679393928
Arbitrum: USDC Token
0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TransparentUpgradeableProxy

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Arbiscan.io on 2021-09-09
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2 <0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


/**
 * @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 internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        // solhint-disable-next-line no-inline-assembly
        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 overriden 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 internall 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 overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {
    }
}


/**
 * @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.
 *
 * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see
 * {TransparentUpgradeableProxy}.
 */
contract UpgradeableProxy is Proxy {
    /**
     * @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 initializating the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) public payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _setImplementation(_logic);
        if(_data.length > 0) {
            Address.functionDelegateCall(_logic, _data);
        }
    }

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed implementation);

    /**
     * @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 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        bytes32 slot = _IMPLEMENTATION_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            impl := sload(slot)
        }
    }

    /**
     * @dev Upgrades the proxy to a new implementation.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal virtual {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "UpgradeableProxy: new implementation is not a contract");

        bytes32 slot = _IMPLEMENTATION_SLOT;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, newImplementation)
        }
    }
}


/**
 * @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 UpgradeableProxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _setAdmin(admin_);
    }

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @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 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _admin()) {
            _;
        } 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 ifAdmin returns (address admin_) {
        admin_ = _admin();
    }

    /**
     * @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 ifAdmin returns (address implementation_) {
        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 virtual ifAdmin {
        require(newAdmin != address(0), "TransparentUpgradeableProxy: new admin is the zero address");
        emit AdminChanged(_admin(), newAdmin);
        _setAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external virtual ifAdmin {
        _upgradeTo(newImplementation);
    }

    /**
     * @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 virtual ifAdmin {
        _upgradeTo(newImplementation);
        Address.functionDelegateCall(newImplementation, data);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address adm) {
        bytes32 slot = _ADMIN_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            adm := sload(slot)
        }
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        bytes32 slot = _ADMIN_SLOT;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, newAdmin)
        }
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _admin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

Contract Security Audit

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": "implementation","type": "address"}],"name": "Upgraded","type": "event"},{"stateMutability": "payable","type": "fallback"},{"inputs": [],"name": "admin","outputs": [{"internalType": "address","name": "admin_","type": "address"}],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "newAdmin","type": "address"}],"name": "changeAdmin","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "implementation","outputs": [{"internalType": "address","name": "implementation_","type": "address"}],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "newImplementation","type": "address"}],"name": "upgradeTo","outputs": [],"stateMutability": "nonpayable","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"}]

608060405260405162000c7e38038062000c7e833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003bf565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c226036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bfb6027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c586026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b60208310620002915780518252601f19909201916020918201910162000270565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030b82828662000315565b9695505050505050565b6060831562000326575081620001d6565b825115620003375782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038357818101518382015260200162000369565b50505050905090810190601f168015620003b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082c80620003cf6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f8603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610732602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105eb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078f6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b6020831061056c5780518252601f19909201916020918201910161054d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cc576040519150601f19603f3d011682016040523d82523d6000602084013e6105d1565b606091505b50915091506105e1828286610653565b9695505050505050565b6105f4816103b0565b61062f5760405162461bcd60e51b81526004018080602001828103825260368152602001806107596036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106625750816103a9565b8251156106725782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bc5781810151838201526020016106a4565b50505050905090810190601f1680156106e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a2646970667358221220be41dff5528c86531d362535fb7ff50711181135afa668f61c1b6ad746dad1be64736f6c634300060c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374

Deployed Bytecode

0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f8603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610732602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105eb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078f6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b6020831061056c5780518252601f19909201916020918201910161054d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cc576040519150601f19603f3d011682016040523d82523d6000602084013e6105d1565b606091505b50915091506105e1828286610653565b9695505050505050565b6105f4816103b0565b61062f5760405162461bcd60e51b81526004018080602001828103825260368152602001806107596036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106625750816103a9565b8251156106725782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bc5781810151838201526020016106a4565b50505050905090810190601f1680156106e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212206c7d9f9210050a2a3b139e9018b711bee78264b2de59dd83f2d515ee541efbf564736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001efb3f88bc88f03fd1804a5c53b7141bbef5ded8000000000000000000000000d570ace65c43af47101fc6250fd6fc63d1c22a86000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _logic (address): 0x1eFB3f88Bc88f03FD1804A5C53b7141bbEf5dED8
Arg [1] : admin_ (address): 0xd570aCE65C43af47101fC6250FD6fC63D1c22a86
Arg [2] : _data (bytes): 0x

-----Encoded View---------------


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

This is a bridged USDC token deployed by Arbitrum Foundation.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8
Net Worth in USD
$469,949.98

Net Worth in ETH
241.168762

Token Allocations
USDC.E 68.00%
USDC 26.30%
USDT 1.60%
Others 4.10%
Chain Token Portfolio % Price Amount Value
ARB66.46%$1312,311.7218$312,311.72
ARB19.78%$192,975.5945$92,975.59
ARB1.17%$0.002,000,000$0.00
ARB0.29%$0.9984381,355.5027$1,353.39
ARB0.12%$0.1138684,983.8117$567.5
ARB$0.0000015,000,000$6.65
ARB$0.06796710$0.6796
ETH5.94%$0.99990227,927.5756$27,924.84
ETH1.41%$0.9995546,622.8172$6,619.86
ETH1.12%$1,949.442.6973$5,258.21
ETH0.03%$1,949.440.0732$142.61
ETH$0.00001429,630$0.4272
ETH$11.890.01$0.1189
BSC0.50%$0.9998522,341.2707$2,340.92
BSC0.47%$0.9995632,222.6502$2,221.68
BSC0.11%$613.690.8736$536.1
BSC0.11%$0.99971530.6572$530.5
BSC0.07%$1,952.40.1618$315.96
BSC0.05%$0.02563310,000$256.33
OP0.97%$0.9999024,537.1406$4,536.7
OP0.35%$1,949.520.8362$1,630.12
OP$0.9999024.83$4.83
OP$0.1880594$0.7522
POL0.58%$12,703.8989$2,703.9
POL0.14%$0.998295677.6$676.44
POL0.03%$0.1079671,210.8481$130.73
POL0.02%$197.8604$97.86
POL$1,952.40.01$19.52
AVAX0.19%$0.999358900.5266$899.95
AVAX0.04%$0.999852198.9025$198.87
AVAX$9.213.0019$27.66
WORLD0.01%$0.99998370.206$70.2
BASE$0.007653,584.3274$27.42
BASE$1,949.070.00425053$8.28
BASE$0.9983346$5.99
BASE$0.9999023.4819$3.48
BASE$0.019895160$3.18
BASE$0.001226100$0.1225
LINEA$1,949.440.017$33.05
OPBNB$613.650.0436$26.77
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.

`; } let ensZeroWidthWarningHtml = ""; if ($("#hdnIsEnsContainZeroWidthChars").val() == "true") { ensZeroWidthWarningHtml = `
${zeroWidthWarningMessage} Check the actual text at ENS.
`; } const ensOnL2NoteHtml = ensOnL2Note != "" ? `
  • ${ensOnL2Note}
  • ` : ""; const contentHtml = `
    Additional Info
    Full Name:
    ${ensNameForkIconSrc}


    Note:
    • Name tag is displayed due to forward and reverse resolution. Find out more.
    • ${ensOnL2NoteHtml}
    ${ensUnicodeWarningHtml} ${ensZeroWidthWarningHtml}
    `; $('#ensName').popover({ html: true, content: contentHtml, trigger: 'manual', placement: 'right' }); $('#ensName').click(function (event) { $("#udName").popover('hide') $("#ensName").popover('toggle'); event.stopPropagation(); }); $('#ensName').on('shown.bs.popover', async () => { //disable tooltip when hovering over ens name in the main page $("[rel='tooltipEns']").each(function () { $(this).tooltip('hide'); $(this).tooltip('disable'); }); //call ajax here to get result if (!otherENSNamesHtml) { const resolvedAddressesModel = await getEnsResolvedAddress($("#hdnAddress").val(), primaryDomainNameLabel); otherENSNamesHtml = generateEnsPopoverGrid(resolvedAddressesModel.d); if (!otherENSNamesHtml) { otherENSNamesHtml = "There are no other names resolving to this address." } } $(".popOverEnsOwnedAddressTable").html(otherENSNamesHtml); $("#divENSDisplayName").html(ensDisplayName); // append more copy button for ENS let domainName = $("#hdnEnsText").val(); const copyEnsButtonHtml = ` `; $("#spanCopyENSAddress").html(copyEnsButtonHtml); $("[data-bs-toggle='tooltip']").tooltip(); }); $('#ensName').on('hidden.bs.popover', () => { $("[rel='tooltipEns']").each(function () { $(this).tooltip('enable'); }); }); $('#ensName').on('hide.bs.popover', () => { $("[data-bs-toggle='tooltip']").tooltip('hide'); }); $(document).click(function (e) { const popoverElement = document.getElementById('popover-ens-preview'); const popoverTrigger = document.getElementById('ensName'); if (!popoverTrigger.contains(e.target) && (!popoverElement || !popoverElement.contains(e.target))) { $("#ensName").popover('hide'); } }) } async function getEnsResolvedAddress(address, currentEnsText) { try { const requestModel = { "lookupAddress": address, "primaryDomainName": currentEnsText, "provider": ensNameProvider }; const response = await $.ajax({ url: "/name-lookup-search.aspx/GetOtherDomainNameForAddress", type: "POST", contentType: "application/json", dataType: "json", data: JSON.stringify({ requestModel: requestModel }) }) return response; } catch { return ""; } } function generateEnsPopoverGrid(model) { if (!model || model.DomainNames.length == 0) { return ""; } let listOtherENSNames = ""; model.DomainNames.forEach(x => listOtherENSNames += x.Name); let moreOtherENSNames = ""; if (model.Total > 5) { moreOtherENSNames = `More ` } const result = `
    Other names resolving to this address:
    ${listOtherENSNames} ${moreOtherENSNames}
    `; return result; } // ===== UD name tag const displayUDName = ''; const primaryUDName = ''; const showUDPublicNote = 'false'; let otherUDNamesHtml = ""; function initUDNamePopOver() { //required to allow bootstrap popover to support table $.fn.popover.Constructor.Default.allowList.table = []; $.fn.popover.Constructor.Default.allowList.tr = []; $.fn.popover.Constructor.Default.allowList.td = []; $.fn.popover.Constructor.Default.allowList.th = []; $.fn.popover.Constructor.Default.allowList.div = []; $.fn.popover.Constructor.Default.allowList.tbody = []; $.fn.popover.Constructor.Default.allowList.thead = []; //allowList my inline styling for bootstrap $.fn.popover.Constructor.Default.allowList['*'].push('style') let unicodeWarningHtml = ""; if ($("#hdnIsUDContainUnicodeChars").val() == "true") { unicodeWarningHtml = `
    ${unicodeWarningMessage} Check the actual text at Unstoppable Domains.
    `; } let zeroWidthWarningHtml = ""; if ($("#hdnIsUDContainZeroWidthChars").val() == "true") { zeroWidthWarningHtml = `
    ${unicodeWarningMessage} Check the actual text at Unstoppable Domains.
    `; } const contentHtml = `
    Additional Info
    Full Name:
    Unstoppable Domains Name


    Note:
    • Name tag is displayed due to forward and reverse resolution. Find out more
    ${unicodeWarningHtml} ${zeroWidthWarningHtml}
    `; $('#udName').popover({ html: true, content: contentHtml, trigger: 'manual' }); $('#udName').click(function (event) { $("#ensName").popover('hide'); $("#udName").popover('toggle'); event.stopPropagation(); }); $('#udName').on('shown.bs.popover', async () => { //disable tooltip when hovering over SID name in the main page $("[rel='tooltipUDName']").each(function () { $(this).tooltip('hide'); $(this).tooltip('disable'); }); //call ajax here to get result if (!otherUDNamesHtml) { const resolvedAddressesModel = await getUDNamesResolvedAddress($("#hdnAddress").val(), primaryUDName); //format the ajax to otherUDNamesHtml otherUDNamesHtml = generateUDPopoverGrid(resolvedAddressesModel.d); if (!otherUDNamesHtml) { otherUDNamesHtml = "There are no other names resolving to this address." } } $(".popoverUDNamesOwnedByAddress").html(otherUDNamesHtml); $("#divDisplayUDName").html(displayUDName); if (showUDPublicNote == true) { $("#noteUD").html('The Unstoppable Domains NFT is minted on the Ethereum blockchain. View and verify its details on Etherscan.'); $("#noteUD").show(); } $("[data-bs-toggle='tooltip']").tooltip(); }); $('#udName').on('hidden.bs.popover', () => { $("[rel='tooltipUDName']").each(function () { $(this).tooltip('enable'); }); }); $('#udName').on('hide.bs.popover', () => { $("[data-bs-toggle='tooltip']").tooltip('hide'); }); // Hide Unstoppable Domains Name popover when click outside the popover popup. $(document).click(function () { $("#udName").popover('hide') }); } async function getUDNamesResolvedAddress(address, primaryUDName) { try { const requestModel = { "lookupAddress": address, "primaryDomainName": primaryUDName, "provider": "UD" }; const response = await $.ajax({ url: "/name-lookup-search.aspx/GetOtherDomainNameForAddress", type: "POST", contentType: "application/json", dataType: "json", data: JSON.stringify({ requestModel: requestModel }) }) return response; } catch { return ""; } } function generateUDPopoverGrid(model) { if (!model || model.DomainNames.length == 0) { return ""; } let listOtherUDNames = ""; model.DomainNames.forEach(x => listOtherUDNames += x.Name); let moreOtherUDNames = ""; if (model.Total > 5) { moreOtherUDNames = `More `; } const result = `
    Other names resolving to this address:
    ${listOtherUDNames} ${moreOtherUDNames}
    `; return result; } // ===== end UD name tag const tooltipForTokenHolding = '107 Token Contracts'; var adjustPosition = 0; $(document).ready(function () { switchAmountToValue(document.getElementById("headerAmountValue"), 'Value (USD)', 'Amount', true); switchAmountToValue(document.getElementById("headerIntAmountValue"), 'Value (USD)', 'Amount', true); switchMethodColumn(document.getElementById("headerMethod"), 'Method', 'Action', true); onDocumentReady(); $("[rel='tooltip']").tooltip(); $("[data-bs-toggle-second='tooltip']").tooltip({ trigger: 'hover' }); $("[rel='tooltipEns']").each(function () { $(this).tooltip({ title: $(this).attr("tooltip-title") }); }); if (hash != '') { activaTab(hash); }; onAddressDocReady(); // Note: this is causing "Copied" tooltip not showing when copy button is clicked in V3, and seems like not applicable to v3, comment out first in case there is issue //$('[data-bs-toggle="tooltip"]').click(function () { // $('[data-bs-toggle="tooltip"]').tooltip("hide"); //}); document.getElementById("copyaddressbutton").classList.remove("disabled"); if ($("#txtSearchContract").length) { initialiseKeyupOnDocReady(); } if (!!$('#ensName')[0]) { initEnsNamePopOver(); } if (!!$("#udName")[0]) { initUDNamePopOver(); } handleToggle(); if (window.matchMedia("(max-width: 767px)").matches) { // Mobile adjustPosition = 90; } else { // Others adjustPosition = 50; } if (tooltipForTokenHolding) { const dropdownMenuBalance = document.getElementById("dropdownMenuBalance"); if (dropdownMenuBalance) { const dropdownWrapper = dropdownMenuBalance.closest(".dropdown"); if (dropdownWrapper) { dropdownWrapper.setAttribute("title", tooltipForTokenHolding); new bootstrap.Tooltip(dropdownWrapper); } } } }); function displayAudit() { $('html, body').animate({ scrollTop: $("#auditReportId").offset().top - adjustPosition }); } var cThemeMode = getCookie('displaymode'); function handleToggle() { var className = document.getElementsByClassName('editor'); var classNameCount = className.length; for (var j = 0; j t.innerWidth()) { if (mb + d > tb) { t.css('padding-bottom', ((mb + d) - tb)); } } else { t.css('overflow', 'visible'); } }).on('hidden.bs.dropdown', function () { $(this).css({ 'padding-bottom': '', 'overflow': '' }); }); var btn_ERC20_sort = { count: 0, reminder_count: 2, list: [], default_list: [], ERC20_sort_start: function (count) { if (document.getElementsByClassName('list-custom-divider-ERC20')[0]) { var self = this if (count != undefined) { self.count = count } var before_el = document.getElementsByClassName('list-custom-divider-ERC20')[0] var parent_el = before_el.parentNode var element_selector = parent_el.querySelectorAll(".list-custom-ERC20"); if (self.list.length == 0) { element_selector.forEach(function (e) { self.list.push(e); self.default_list.push(e); }); } $(".list-custom-ERC20").remove() var type = self.count % self.reminder_count self.sortList(type, parent_el, before_el); self.count++ } }, sortList: function (type, parent_el, before_el) { var self = this var sorted_list = [] var icon_el = $(before_el).find('button').find('i') switch (type) { case 1: icon_el.attr("class", "fad fa-sort-up") sorted_list = self.sortUsdAsc() break; default: icon_el.attr("class", "fad fa-sort-down") sorted_list = self.sortUsdDesc() } for (var i = sorted_list.length - 1; i >= 0; i--) { before_el.insertAdjacentElement('afterend', sorted_list[i]) } }, sortUsdAsc: function () { var self = this var sort_list = self.list sort_list.sort(function (a, b) { var target_a_value = self.formatCurrencyToNumber(a.querySelector('.list-usd-value').textContent.trim() || -1); var target_b_value = self.formatCurrencyToNumber(b.querySelector('.list-usd-value').textContent.trim() || -1); if (target_a_value == -1 || target_b_value == -1) { return 1; } if (target_a_value target_b_value) { return 1; } return 0 }); return sort_list }, sortUsdDesc: function () { var self = this var sort_list = self.list sort_list.sort(function (a, b) { var target_a_value = self.formatCurrencyToNumber(a.querySelector('.list-usd-value').textContent.trim() || -1); var target_b_value = self.formatCurrencyToNumber(b.querySelector('.list-usd-value').textContent.trim() || -1); if (target_a_value target_b_value) { return -1; } return 0 }); return sort_list }, formatCurrencyToNumber: function (strCurrency) { if (typeof strCurrency == "number") return strCurrency else return Number(strCurrency.replace(/[^0-9.-]+/g, "")); }, } function hrefTokenHolding() { var location = "/tokenholdings?a=0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" var queryString = $("input.form-control.form-control-xs.search.mb-3")[0].value if (queryString) { location += "&q=" + queryString } window.location.href = location } $(document).ready(function () { $("#btn_ERC20_sort").on("click", function (event) { event.preventDefault(); setTimeout(function () { btn_ERC20_sort.ERC20_sort_start() }, 10) }) btn_ERC20_sort.ERC20_sort_start() var mainAddress = $("#hdnAddress").val(); // user search for method filters var searchFuncTimeOut; $("#ContentPlaceHolder1_inputMethodName").on("keyup", function ($event) { if (searchFuncTimeOut) { clearTimeout(searchFuncTimeOut) } var searchTerm = $(this).val(); searchFuncTimeOut = setTimeout(function () { searchFunctions( searchTerm); }, 350); }); var isSearchFunctions = false; $("#dropdownMethod").on("click", function (e) { if (isSearchFunctions === false) { searchFunctions(''); isSearchFunctions = true; } }); const litDefaultMethodFilterHtml = ''; function searchFunctions(searchTerm) { if (searchTerm === '' || searchTerm.length > 3) { const curPath = encodeURIComponent(window.location.search); $.ajax({ type: 'Get', url: `/functionSearchHandler.ashx?ca=${mainAddress}&func=${searchTerm ?? ''}&curPath=${curPath}`, success: function (response) { $("#searchFunctionResult").html(''); if (response && response.length > 0) { for (var i = 0; i ${response[i].name} ${response[i].methodId} ` ); } $("[data-bs-toggle='tooltip']").tooltip(); } else { $("#searchFunctionResult").append( `` ); } $("#inputMethodSpinner").hide(); }, error: function (XMLHttpRequest, textStatus, errorThrown) { $("#searchFunctionResult").html(''); $("#inputMethodSpinner").hide(); } }); } else { $("#inputMethodSpinner").hide(); $("#searchFunctionResult").html(litDefaultMethodFilterHtml); } } // Resize window for analytic tab let isBusy = false; $(window).resize(function () { isBusy = true; if (isBusy) { let analyticFrame = document.getElementById('analytics_pageiframe'); if (analyticFrame && analyticFrame.contentWindow != undefined) { let navtab = analyticFrame.contentWindow.document.getElementsByClassName("nav_tabs1"); let hIframe = "0px"; if (navtab != null && navtab != undefined && navtab.length > 0) { let navH = Number(navtab[0].scrollHeight); hIframe = (Number(analyticFrame.contentWindow.document.getElementsByClassName("tab-content")[0].scrollHeight) + navH + 20) + 'px'; } else { hIframe = analyticFrame.contentWindow.document.body.scrollHeight + 'px'; } analyticFrame.style.height = hIframe } } }); // detect tooltip for token holding dropdown if ($(".addresses-tooltip-over").length > 0) { if (!isMobile()) { $(".addresses-tooltip-over").attr("data-bs-trigger", "hover"); let tooltip = bootstrap.Tooltip.getInstance(".addresses-tooltip-over"); if (tooltip !== null) { tooltip.dispose(); tooltip = new bootstrap.Tooltip($(".addresses-tooltip-over")); tooltip._config.trigger = 'hover'; tooltip.update(); } } } // Quick export transaction csv const quickExportCsvData = '[{"Txhash":"0xb2c6e2f4117a04f67a1c00759fb03623395c221d5110e02d4926c447ed0619d0","Status":"Success","Method":"Approve","Blockno":"432476375","DateTime":"2026-02-15 20:58:38","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000121"},{"Txhash":"0xb9b4121425a1edb3461deb9217d4d1290741533f509cbf187ee1aaced9af456e","Status":"Success","Method":"Approve","Blockno":"432476133","DateTime":"2026-02-15 20:57:39","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x9a2bb10c80058b391da612397029c56178147b4ab43a04ed49781ca1da035720","Status":"Success","Method":"Approve","Blockno":"432476065","DateTime":"2026-02-15 20:57:22","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x854bbb958c2fd145f94f2cb3b253ac36709a3e4da40f70c97c5cef21f80a29e1","Status":"Success","Method":"Approve","Blockno":"432475745","DateTime":"2026-02-15 20:56:02","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x9c10859d910c95d281536f9eead031b8d6c506e114a88663a2bf351940377e97","Status":"Success","Method":"Approve","Blockno":"432475740","DateTime":"2026-02-15 20:56:00","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x10c934c6db6706a15893ab1fa8ccc794783faacb88b48a6899ff03668fa7f70a","Status":"Success","Method":"Approve","Blockno":"432475525","DateTime":"2026-02-15 20:55:07","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xad16431014d8f3fd70306f45d4be1a03c083411c18d57d0fc7f132df908221a0","Status":"Success","Method":"Approve","Blockno":"432475523","DateTime":"2026-02-15 20:55:06","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xa8622900f3edbfb9d85f83b98271c49f5658e0929db41fad2965ad6a9f35b286","Status":"Success","Method":"Approve","Blockno":"432475347","DateTime":"2026-02-15 20:54:22","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xa8e04a064a781411b6b7dee81d489d29809865c8a09af6f303c611011b9f6fd4","Status":"Success","Method":"Approve","Blockno":"432475344","DateTime":"2026-02-15 20:54:21","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xa34ae31ea060b0e5939c05b70c689e605adb5a0cb6b11d988152598cd8b47b62","Status":"Success","Method":"Transfer","Blockno":"432475282","DateTime":"2026-02-15 20:54:06","Sender":"0x410Bc67AeCac64C8bACc68ba7A96d6155b01AacF","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000131"},{"Txhash":"0x62b5f9db44fd26a6e42e6dc3514b609c7213dded89fb9da18817faf40bceb6a1","Status":"Success","Method":"Approve","Blockno":"432475088","DateTime":"2026-02-15 20:53:17","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xd1a99709b0ebe0e6d8c351bbb6e056184b01950ef8f7cd799abc1d3590b9ebce","Status":"Success","Method":"Approve","Blockno":"432475085","DateTime":"2026-02-15 20:53:16","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x7b1d6f5c389603835fcaac59ba72adfd384b4ead17e136efcae2e63eddb85479","Status":"Success","Method":"Approve","Blockno":"432474747","DateTime":"2026-02-15 20:51:52","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000121"},{"Txhash":"0xac00950570926df6a6d1fe4164fa420579ddc6cc32e34c3a0be0d42a40871211","Status":"Success","Method":"Approve","Blockno":"432474745","DateTime":"2026-02-15 20:51:51","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x537e171c157a0e80b57638e87364d36fe02960d2eee4396485896c0608e50359","Status":"Success","Method":"Transfer","Blockno":"432474565","DateTime":"2026-02-15 20:51:08","Sender":"0x32309cc0291074B259e0C6F4120d92175A7A7Fca","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000087"},{"Txhash":"0xcccccaa73bed51b087da9e174f49b2368b972b7d716c3296f52e35321a326256","Status":"Success","Method":"Approve","Blockno":"432474439","DateTime":"2026-02-15 20:50:37","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x880dbd57a13c7446fb9cead865a480eca541d6b05bf7a8a2ccd3261a904f45ed","Status":"Success","Method":"Approve","Blockno":"432474430","DateTime":"2026-02-15 20:50:35","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000122"},{"Txhash":"0x8abb405e17260b91dc2f403b1ed93ef5ad935eb5abcaf9f3ac1ad879fadcc6a3","Status":"Success","Method":"Approve","Blockno":"432474399","DateTime":"2026-02-15 20:50:27","Sender":"0x17CCAE83b13e670bD817dDb7C0098c1458989c09","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xdeee8e6fae651432ff9342fa91bedbf1ab165785e9c0d4f8d7d48df4db659a34","Status":"Success","Method":"Approve","Blockno":"432474083","DateTime":"2026-02-15 20:49:08","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x682266a1fdc27d346a11ac906e51adea45f7575fb915b3d7cc65e13967dee9bd","Status":"Success","Method":"Approve","Blockno":"432474075","DateTime":"2026-02-15 20:49:06","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000121"},{"Txhash":"0x3d482dff8266582184fe292873ea220623b347c1eb4547cedd55dd91c7622507","Status":"Success","Method":"Approve","Blockno":"432473942","DateTime":"2026-02-15 20:48:32","Sender":"0x4919bc28440de94C16e006541AA61123D79DD783","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000121"},{"Txhash":"0x72ca4fb3a313fa7567b8925ee62bb3fb2c792bd8de4bb5c6e2461ba27ba27cfc","Status":"Success","Method":"Approve","Blockno":"432473687","DateTime":"2026-02-15 20:47:28","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.00000121"},{"Txhash":"0xcfaf68ed324b408603a76e523e9a787703beae41b5cac8982148acb3417a9c7c","Status":"Success","Method":"Approve","Blockno":"432473672","DateTime":"2026-02-15 20:47:25","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0x055ec7539359b00e6e65b8198ebba82a62da87206795f913f39d3bb3359fca3b","Status":"Success","Method":"Approve","Blockno":"432473422","DateTime":"2026-02-15 20:46:22","Sender":"0x5f4Ad7Df76E90a084eFaAD995553621a263322F6","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"},{"Txhash":"0xba5697adfbb72a4b7dfd13af9ecf4505d9b5bd0c4bfa595aaa1dc9be221b435a","Status":"Success","Method":"Approve","Blockno":"432473417","DateTime":"2026-02-15 20:46:21","Sender":"0x861aD2637042CE2C2378b6D5E93f0a3E9a57Fb5B","SenderLable":null,"Receiver":"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8","ReceiverLable":"Arbitrum: USDC Token","Amount":"0 ETH","Value":"$0.00","TxnFee":"0.0000012"}]'; const quickExportCsvTitle = 'Transaction Hash,Status,Method,Blockno,"DateTime (UTC)",From,From_Nametag,To,To_Nametag,Amount,Value (USD),Txn Fee'; let isExportFinish = true; if ($("#btnExportQuickTableToCSV").length > 0 && quickExportCsvData) { $("#btnExportQuickTableToCSV").click(function () { if (isExportFinish == true) { isExportFinish = false; $("#btnExportQuickTableToCSV").append(''); let lstTxsObj = JSON.parse(quickExportCsvData); if (lstTxsObj.length > 0) { let csvRows = []; csvRows.push(quickExportCsvTitle.replace(/"/g, "")); for (let i = 0; i 0 && quickExportInternalTxsData) { $("#ContentPlaceHolder1_btnQuickExportInternalTxs").click(function () { if (isExportFinish == true) { isExportFinish = false; $("#ContentPlaceHolder1_btnQuickExportInternalTxs").append(''); let lstTxsObj = JSON.parse(quickExportInternalTxsData); if (lstTxsObj.length > 0) { let csvRows = []; csvRows.push(quickExportInternalTxsTitle.replace(/"/g, "")); for (let i = 0; i { if (x.startsWith("F")) { file = x.replace("F", ""); } else if (x.startsWith("L")) { line = x.replace("L", ""); } }) var editorId = "editor" + file var editorElem = $("#" + editorId); if (!editorElem.length) { return; } if (!line) { return; } var editor = ace.edit(editorId); editor.resize(true); editor.scrollToLine(line, true, true, function () { }); editor.gotoLine(line); var Range = ace.require('ace/range').Range $(document).scrollTop($("#" + editorId).offset().top - 95); //document.getElementById(editorId).scrollIntoView(); editor.session.addMarker(new Range(line - 1, 0, line - 1, 1), "myMarker", "fullLine"); //window.onbeforeunload = function () { $(document).scrollTop($("#" + editorId).offset().top); }; } setTimeout(function () { editorGoToLine(); }, 500); }); $("body,html").click(function (evt) { let elm = $(evt.target).attr("id"); let isClickedMode = elm === "darkModaBtn" || elm === "darkModaBtnIcon"; if (isClickedMode) { let isClickedSunMode = false; let clrBorder = "#112641"; if (elm === "darkModaBtn") isClickedSunMode = $(evt.target).find("#darkModaBtnIcon").hasClass("fa-moon"); if (elm === "darkModaBtnIcon") isClickedSunMode = $(evt.target).hasClass("fa-moon"); if (isClickedSunMode) { clrBorder = "#fff"; } let iframes = document.getElementById('analytics_pageiframe'); let heatcell = iframes.contentWindow.document.getElementsByClassName("ch-day").length; for (let i = 0; i