Contract 0x796dff6d74f3e27060b71255fe517bfb23c93eed

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5eaa46db7c0e1526ce8e6e11e2c3aa2efbc78c4f0c90b43223e4693ba67d0f94Complete Transfe...196301812023-06-03 19:05:501 min ago0xd667f70d06026fd82eccd383e5e4ffcffac2355a IN  Wormhole: Token Bridge0 CELO0.005844825
0xe21f64557a42183289027f776e12ffda737d6dced6226b64763ae37166cc98abTransfer Tokens196300412023-06-03 18:54:1013 mins ago0xa8ebfa3a881054839966a351695e9a21bfbcb013 IN  Wormhole: Token Bridge0 CELO0.0020917
0x58d2578c806fc615d513a51c58a9216001f9d3905cebb6a058afc0dc68089752Complete Transfe...196299972023-06-03 18:50:3017 mins ago0xa8ebfa3a881054839966a351695e9a21bfbcb013 IN  Wormhole: Token Bridge0 CELO0.0055647
0x30f966f10a34b8fd25a509302ebb37f7556b498cf2612010ff6fa651c0b90f50Transfer Tokens196291262023-06-03 17:37:551 hr 29 mins ago0x2ffabcdc10acf1309fc501f296e9e5b56c80c344 IN  Wormhole: Token Bridge0 CELO0.002273875
0x90099b2524f591cfc34b8a05c933def3e153d1ad2c9a2800531678d166671c34Complete Transfe...196291052023-06-03 17:36:101 hr 31 mins ago0x2ffabcdc10acf1309fc501f296e9e5b56c80c344 IN  Wormhole: Token Bridge0 CELO0.005197
0xd81b1686b33574d6456f9e1dc1bffc85c00c584c839063ff2f78fc529b790cffTransfer Tokens196281562023-06-03 16:17:052 hrs 50 mins ago0x77872cfa49053b0274e1b16b1f3bc3480ea5b792 IN  Wormhole: Token Bridge0 CELO0.0023106
0xeb366ff217e3ebaa1ebad637921d877be4e526c0b79c761b3ddda543e31f703bTransfer Tokens196269092023-06-03 14:33:104 hrs 34 mins ago0x044530a1981174bf21349ee9036105a1d4c73144 IN  Wormhole: Token Bridge0 CELO0.0025419075
0xebcfd8bde6e4f74fbbf0a22162b8e4e5544c5bd3d5e357e133c1f10ca7edb438Complete Transfe...196263352023-06-03 13:45:205 hrs 22 mins ago0xcc35f4c022992cdb0ab7b19fb45d4173a34fde02 IN  Wormhole: Token Bridge0 CELO0.005227375
0x823c6531905b81fdef7385bcaa3b31e22e1e2c9437001f8593a745e9b482b908Transfer Tokens196263032023-06-03 13:42:405 hrs 24 mins ago0xb969a8250dd80857347c880dba14d7e3d9b2fd3c IN  Wormhole: Token Bridge0 CELO0.002273875
0x2629e8099a19a4ef84e19168b836ea2b0ad901a8436ee5225ad90f72dce49ebaTransfer Tokens196252552023-06-03 12:15:206 hrs 52 mins ago0x8088e07e0cc41ba56069b67a420f577f75120014 IN  Wormhole: Token Bridge0 CELO0.0020881
0xcfe77b0e08c759f7401136dedbd3e69f7ff14e26e1eed3b6762010a1717447c3Transfer Tokens196252122023-06-03 12:11:456 hrs 55 mins ago0x8088e07e0cc41ba56069b67a420f577f75120014 IN  Wormhole: Token Bridge0 CELO0.001071525
0xc4e44f224cf8550551f2e1d43ed9b4f3139310be01b599e01a12527365f4878dTransfer Tokens196229342023-06-03 9:01:5510 hrs 5 mins ago0xcd282b7fee89312d15ef036cf54be1c9df1c4bca IN  Wormhole: Token Bridge0 CELO0.0021778075
0x1d50f851d14b9905c5fabb1e3db791abace8236407c42b75b67afff91f6904deTransfer Tokens196227572023-06-03 8:47:1010 hrs 20 mins ago0xcd282b7fee89312d15ef036cf54be1c9df1c4bca IN  Wormhole: Token Bridge0 CELO0.00254166
0x43c43b0328ec98bb405c252f6fdb17414a3eff646cfdfeace21a68b5a642850aTransfer Tokens196218352023-06-03 7:30:2011 hrs 37 mins ago0xf13d87279e272639d32d1b4edee9a71aad15868f IN  Wormhole: Token Bridge0 CELO0.00227075
0xddc77c80d3baff859c79846750d768a9bad2583f8d68d874d579e29a997eb06fComplete Transfe...196217012023-06-03 7:19:1011 hrs 48 mins ago0x2db5b6a383803c0411b17f0cf5ea195114a5f009 IN  Wormhole: Token Bridge0 CELO0.005589000276
0xf635fea092ff2664bf9b6c90f69233318ad8b1604e8daf2476acd7030e459fbdTransfer Tokens196190172023-06-03 3:35:3015 hrs 32 mins ago0xb763e8b9208a5a0bef08f200cfc76c0d03e7a5a1 IN  Wormhole: Token Bridge0 CELO0.00227075
0x319642793bd3b6edbf5f772ac445568ea54959d75b4af3f4a7c7c2737a52d5fcComplete Transfe...196188432023-06-03 3:21:0015 hrs 46 mins ago0xb763e8b9208a5a0bef08f200cfc76c0d03e7a5a1 IN  Wormhole: Token Bridge0 CELO0.0055869
0x01eeffabc571b0cd573ed57d3cddf8ace629283e8e51e5c9fae30115a24ff918Complete Transfe...196171002023-06-03 0:55:4518 hrs 11 mins ago0xef66d1cdefc888818cecb1eac36e8ae20d1403c5 IN  Wormhole: Token Bridge0 CELO0.0055878
0x61ed60143432c6fe29eb78c0fb9347c5dfdc612dc0dc6b161453637985224856Transfer Tokens196142792023-06-02 21:00:4022 hrs 6 mins ago0xd880507d359af862a5f8f318c8e934ab478ca818 IN  Wormhole: Token Bridge0 CELO0.0027261084
0x7630f6b52a828336bb2ab19832f82cb33ee6e6b44d95fa9d630b38568c01eccdTransfer Tokens196140102023-06-02 20:38:1522 hrs 29 mins ago0x2ffabcdc10acf1309fc501f296e9e5b56c80c344 IN  Wormhole: Token Bridge0 CELO0.002313475
0x7a6cf75c307c6812703d7e0d1db97fd72ff7aa99e82a3f858171b0a1fb84d89cComplete Transfe...196139852023-06-02 20:36:1022 hrs 31 mins ago0x2ffabcdc10acf1309fc501f296e9e5b56c80c344 IN  Wormhole: Token Bridge0 CELO0.0055653
0x05431c18ff00e4215153310fb8c7f0d17bf740062fde22bde5e8e152433044c0Complete Transfe...196131892023-06-02 19:29:5023 hrs 37 mins ago0x751d833e461a1a4d7c3431d512ac4245df7f0a03 IN  Wormhole: Token Bridge0 CELO0.0051649
0x387d11ad89651f193fe4bd019c58ad189476b5eea3a7295e14b95406ebe0e638Transfer Tokens196126802023-06-02 18:47:251 day 20 mins ago0x751d833e461a1a4d7c3431d512ac4245df7f0a03 IN  Wormhole: Token Bridge0 CELO0.002271
0xe05e825e30145e363727ed206acaa536d505fab1f1b395138b41eee419d29cdaComplete Transfe...196123922023-06-02 18:23:251 day 44 mins ago0x9db948104d55fe65531579ed9c1d5df32299769b IN  Wormhole: Token Bridge0 CELO0.001045585
0x5f5a4f1220110111a8a12e1ab3dc55e63d7b6bfc5e8bcdf74c866966b4e3a2dcTransfer Tokens196118692023-06-02 17:39:501 day 1 hr ago0xb969a8250dd80857347c880dba14d7e3d9b2fd3c IN  Wormhole: Token Bridge0 CELO0.002273875
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7cb0cb0c129284e9a94ac693a019812dd3d529c56b806b7005353dec48b55841194512282023-05-24 10:32:5810 days 8 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0xcd7d639b1c6ff8b443b800c7b46cd5c1912df558e8b48c9e4b302f6fd666a063193562902023-05-18 22:41:2515 days 20 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x52840d5e63f883af52317c11cb09e5f05a04e5cc9cf591f94ba9b3e12dc1c788192358752023-05-11 23:26:4822 days 19 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0xd09807addf3d0dd9b5226cafb715f8e5c85876faf5438142e6df19add1d35304191565322023-05-07 9:14:3127 days 9 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x3bcb1b6b89cf69f589688a8fb46c8cb8145c6199639bedbbbfff1c432cd4a6bc191288002023-05-05 18:43:3129 days 24 mins ago Wormhole: Token Bridge  Contract Creation0 CELO
0xc0dd111aed6419488279141b151988fc7c6cea5ce19a79e46a8ee6b3ad18f34e190784702023-05-02 20:49:2131 days 22 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x1ec3f1c2b9106b299173b9ada449d4424a3df2597168a378930b074c463db330190781692023-05-02 20:24:1631 days 22 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x1063a9e6ca21ff746e59b4d40e822892493665641b33a2371d6ed0b21c03f574190574272023-05-01 15:35:4633 days 3 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x72261c5d17d265ff676a5c6b01b2a2813296e156bc51052f10c205c363364fca187662142023-04-14 19:07:3050 days ago Wormhole: Token Bridge  Contract Creation0 CELO
0x39c37a12d1bff1c89c44573e5add35a6f8a71232601a769668c29ffff46e57fe187481492023-04-13 18:02:0451 days 1 hr ago Wormhole: Token Bridge  Contract Creation0 CELO
0xfe4458c752cec020e8b4894481d9f3024af5932552721a6e901d65145c1ee032187323002023-04-12 20:01:1951 days 23 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0xee9c881bd49a1ce8e2e00b911f9a71d84769e8fdab910fa0575221aefc4255a8187134932023-04-11 17:54:0453 days 1 hr ago Wormhole: Token Bridge  Contract Creation0 CELO
0xf1dd8feac9df738ff43324bb84160bcc54f081dbbdac9cc34cf644aee250993d186787942023-04-09 17:42:2855 days 1 hr ago Wormhole: Token Bridge  Contract Creation0 CELO
0x8e3994c5e92147a6b84ea8b55361121b7923e022de55c25261741305f4f101d3186254672023-04-06 15:38:3158 days 3 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x2e0e1e100e9eb78782e6f63cf8e13e5d918ee0ac1455fae9e6c0b4b377a87c4e184827652023-03-29 9:26:3066 days 9 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x9385973f201e230c59b9e5f9a5546034a4cbd5e03f47cdba757b35047ee495d3184409552023-03-26 23:22:2068 days 19 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0xa9bcfeeddc4edc868e20b2f90cc1bc4356793cdc1e92ace0a50702040d10d34e184384372023-03-26 19:52:3068 days 23 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0xa2ae6ac8b2f8333d2befa2e370aebaa33c8373363291d8f682bbac4bc176f609183682662023-03-22 18:24:5573 days 42 mins ago Wormhole: Token Bridge  Contract Creation0 CELO
0xbbd50ccfe7fcb3f8f8b41ea16d54db6b7f12535d58aad8a5cfdcbdad5cedc497183080632023-03-19 6:47:5876 days 12 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x06cf1674d1ea5717ae07904d3d137c8ec0e50f03a2cf6fec476181d5cef45c56182137282023-03-13 19:46:3881 days 23 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x490af163aa9b9dd861f98f2a2f58e0e3c0d8aab1df50ffe40b411eaa17346465181205322023-03-08 10:20:1487 days 8 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x71fc822fdf24cd1a82d1cd122219603d53238333f1ccafd61108dc7c7ba225e5180623822023-03-05 1:34:2390 days 17 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x1d2a8ff23b12aaa138d3903ea2bbe4441e3eb445a3d807680e386a1a2e35452b174910282023-01-31 0:00:03123 days 19 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x2fe6f1141c82ae77b106651db228c116746adf25067d5fe5ec541a51d14f0093174906042023-01-30 23:24:43123 days 19 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
0x83a084cfad1aafdf63715a25f926fffc40c6fd79634dbb943c1cd04ed59d3ede174560572023-01-28 23:25:46125 days 19 hrs ago Wormhole: Token Bridge  Contract Creation0 CELO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenBridge

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at celoscan.io on 2022-05-16
*/

// File: @openzeppelin/contracts/proxy/Proxy.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall 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 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 {}
}

// File: @openzeppelin/contracts/proxy/beacon/IBeacon.sol

pragma solidity ^0.8.0;

/**
 * @dev This is the interface that {BeaconProxy} expects of its beacon.
 */
interface IBeacon {
    /**
     * @dev Must return an address that can be used as a delegate call target.
     *
     * {BeaconProxy} will check that this address is a contract.
     */
    function implementation() external view returns (address);
}

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^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;
        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");

        (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");

        (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");

        (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");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/StorageSlot.sol

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

// File: @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol

pragma solidity ^0.8.2;



/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 *
 * _Available since v4.1._
 *
 * @custom:oz-upgrades-unsafe-allow delegatecall
 */
abstract contract ERC1967Upgrade {
    // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

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

    /**
     * @dev Returns the current implementation address.
     */
    function _getImplementation() internal view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
    }

    /**
     * @dev Perform implementation upgrade
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Perform implementation upgrade with additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCall(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        _upgradeTo(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCallSecure(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        address oldImplementation = _getImplementation();

        // Initial upgrade and setup call
        _setImplementation(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }

        // Perform rollback test if not already in progress
        StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT);
        if (!rollbackTesting.value) {
            // Trigger rollback using upgradeTo from the new implementation
            rollbackTesting.value = true;
            Address.functionDelegateCall(
                newImplementation,
                abi.encodeWithSignature("upgradeTo(address)", oldImplementation)
            );
            rollbackTesting.value = false;
            // Check rollback was effective
            require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades");
            // Finally reset to the new implementation and log the upgrade
            _upgradeTo(newImplementation);
        }
    }

    /**
     * @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);
        }
    }
}

// File: @openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol

pragma solidity ^0.8.0;


/**
 * @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 initializating the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeToAndCall(_logic, _data, false);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        return ERC1967Upgrade._getImplementation();
    }
}

// File: contracts/bridge/TokenBridge.sol

// contracts/Wormhole.sol

pragma solidity ^0.8.0;

contract TokenBridge is ERC1967Proxy {
    constructor (address implementation, bytes memory initData)
    ERC1967Proxy(
        implementation,
        initData
    )
    {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"initData","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5060405161078f38038061078f83398101604081905261002f91610314565b818161005c60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61042c565b6000805160206107488339815191521461008657634e487b7160e01b600052600160045260246000fd5b6100928282600061009b565b50505050610491565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b6100291760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101368383604051806060016040528060278152602001610768602791396101fd565b9392505050565b610150816102d260201b6100551760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061074883398151915260001b6102d860201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060833b61025c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161027791906103dd565b600060405180830381855af49150503d80600081146102b2576040519150601f19603f3d011682016040523d82523d6000602084013e6102b7565b606091505b5090925090506102c88282866102db565b9695505050505050565b3b151590565b90565b606083156102ea575081610136565b8251156102fa5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103f9565b60008060408385031215610326578182fd5b82516001600160a01b038116811461033c578283fd5b60208401519092506001600160401b0380821115610358578283fd5b818501915085601f83011261036b578283fd5b81518181111561037d5761037d61047b565b604051601f8201601f19908116603f011681019083821181831017156103a5576103a561047b565b816040528281528860208487010111156103bd578586fd5b6103ce83602083016020880161044f565b80955050505050509250929050565b600082516103ef81846020870161044f565b9190910192915050565b602081526000825180602084015261041881604085016020870161044f565b601f01601f19169190910160400192915050565b60008282101561044a57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561046a578181015183820152602001610452565b838111156100ca5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104a06000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b602081526000825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c651652cc0041da7a6ccfbb62ab4d69a33d006e787e6a41c09cd2b8fb857905d64736f6c63430008040033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000051b5123a7b0f9b2ba265f9c4c8de7d78d52f510f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e43bfa0638000000000000000000000000b91e3638f82a1facb28690b37e3aae45d2c33808000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000a321448d90d4e5b0a732867c18ea198e75cac48e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a5f208e072434bc67592e4c49c1b991ba79bca46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000051b5123a7b0f9b2ba265f9c4c8de7d78d52f510f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e43bfa0638000000000000000000000000b91e3638f82a1facb28690b37e3aae45d2c33808000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000a321448d90d4e5b0a732867c18ea198e75cac48e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a5f208e072434bc67592e4c49c1b991ba79bca46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : implementation (address): 0x51b5123a7b0f9b2ba265f9c4c8de7d78d52f510f
Arg [1] : initData (bytes): 0x3bfa0638000000000000000000000000b91e3638f82a1facb28690b37e3aae45d2c33808000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000a321448d90d4e5b0a732867c18ea198e75cac48e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a5f208e072434bc67592e4c49c1b991ba79bca460000000000000000000000000000000000000000000000000000000000000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000051b5123a7b0f9b2ba265f9c4c8de7d78d52f510f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e4
Arg [3] : 3bfa0638000000000000000000000000b91e3638f82a1facb28690b37e3aae45
Arg [4] : d2c3380800000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000e000000000000000000000000a321448d90d4e5b0a732867c18ea198e
Arg [6] : 75cac48e00000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [8] : 00000004000000000000000000000000a5f208e072434bc67592e4c49c1b991b
Arg [9] : a79bca4600000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

22598:183:0:-:0;;;;;;2959:11;:9;:11::i;:::-;22598:183;;2728:11;2365:113;2442:28;2452:17;:15;:17::i;:::-;2442:9;:28::i;:::-;2365:113::o;10109:200::-;10192:12;10224:77;10245:6;10253:4;10224:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;10217:84;10109:200;-1:-1:-1;;;10109:200:0:o;4515:387::-;4838:20;4886:8;;;4515:387::o;13461:151::-;13590:4;13565:40::o;22348:142::-;22415:12;22447:35;15236:66;15597:54;-1:-1:-1;;;;;15597:54:0;;15517:142;22447:35;22440:42;;22348:142;:::o;955:918::-;1298:14;1295:1;1292;1279:34;1516:1;1513;1497:14;1494:1;1478:14;1471:5;1458:60;1595:16;1592:1;1589;1574:38;1635:6;1704:68;;;;1823:16;1820:1;1813:27;1704:68;1740:16;1737:1;1730:27;10503:396;10648:12;4838:20;;10673:69;;;;-1:-1:-1;;;10673:69:0;;883:2:1;10673:69:0;;;865:21:1;922:2;902:18;;;895:30;961:34;941:18;;;934:62;-1:-1:-1;;;1012:18:1;;;1005:36;1058:19;;10673:69:0;;;;;;;;;10756:12;10770:23;10797:6;-1:-1:-1;;;;;10797:19:0;10817:4;10797:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10755:67;;;;10840:51;10857:7;10866:10;10878:12;10840:16;:51::i;:::-;10833:58;10503:396;-1:-1:-1;;;;;;10503:396:0:o;11127:712::-;11277:12;11306:7;11302:530;;;-1:-1:-1;11337:10:0;11330:17;;11302:530;11451:17;;:21;11447:374;;11649:10;11643:17;11710:15;11697:10;11693:2;11689:19;11682:44;11597:148;11792:12;11785:20;;-1:-1:-1;;;11785:20:0;;;;;;;;:::i;14:274:1:-;143:3;181:6;175:13;197:53;243:6;238:3;231:4;223:6;219:17;197:53;:::i;:::-;266:16;;;;;151:137;-1:-1:-1;;151:137:1:o;293:383::-;442:2;431:9;424:21;405:4;474:6;468:13;517:6;512:2;501:9;497:18;490:34;533:66;592:6;587:2;576:9;572:18;567:2;559:6;555:15;533:66;:::i;:::-;660:2;639:15;-1:-1:-1;;635:29:1;620:45;;;;667:2;616:54;;414:262;-1:-1:-1;;414:262:1:o;1088:258::-;1160:1;1170:113;1184:6;1181:1;1178:13;1170:113;;;1260:11;;;1254:18;1241:11;;;1234:39;1206:2;1199:10;1170:113;;;1301:6;1298:1;1295:13;1292:2;;;1336:1;1327:6;1322:3;1318:16;1311:27;1292:2;;1141:205;;;:::o

Swarm Source

ipfs://c651652cc0041da7a6ccfbb62ab4d69a33d006e787e6a41c09cd2b8fb857905d
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.