Contract 0x7c9fc5741288cdfdd83ceb07f3ea7e22618d79d2 5

 

Contract Overview

Wormhole: Token Bridge
Balance:
0 FTM

FTM Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8318adc05a3d022b1f2b472ef4dd8a8d42d8ba7c1c2c43628d96c7f7132829eaTransfer Tokens549096422023-02-02 10:28:0231 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.012915755781
0x052cb153d5f154053a34e34be0f687fcbd1e2397f2a58f95140ac4270ff7afbaTransfer Tokens549095162023-02-02 10:25:3034 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.007934901675
0xca2e530a8e9ea65cb5b7bd6da50a48a531da894b4aac77ba29afaa2197709b04Transfer Tokens549093932023-02-02 10:23:0236 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.009968697268
0x3960a5cda9cfc0d262b83ebfeb0bdb0fd37e5732ba1a8d33ebb504f58426aa32Transfer Tokens549092712023-02-02 10:20:2839 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.012227420446
0xd044010ecbb233753caea9ff8b9a66d8f6b93f5363eaf2dc570923d227f8ec12Transfer Tokens549091782023-02-02 10:18:3241 mins ago0xb75af6aac0b676857bd1e0953849593b25f6adec IN  Wormhole: Token Bridge0 FTM0.012665234509
0x7e884954578e5c9652017aafd284ce781cd2cbeeba234ffa555e639c9be3a01cTransfer Tokens549088232023-02-02 10:11:0748 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.013542725048
0x2622a1f547bcef5f492f3700c94f46314a57e90df21b776c00a8f6ebfa9cba4fTransfer Tokens549086762023-02-02 10:07:5351 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.014294796192
0x7bdbf042aeae35db7ab4ea4b3dcd8678c6f84eb60b157a525c42db35a52b5cbfTransfer Tokens549081902023-02-02 9:57:301 hr 2 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.013038490072
0x5277c64150a07ac1ead441144c47a5c70363e0aa3f37957a009c8cde1daff618Transfer Tokens549076442023-02-02 9:46:401 hr 13 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.01276219449
0xa061c336269f0aa408783622795fe69f74e24bc61b170d76d0eaa5594230a5f0Complete Transfe...549063482023-02-02 9:20:081 hr 39 mins ago0xb75af6aac0b676857bd1e0953849593b25f6adec IN  Wormhole: Token Bridge0 FTM0.02002669119
0xab6b0eeda7fa167d7b90817d732038fd5490e4f2e5cafa3082da134ebbe81dc2Transfer Tokens549061762023-02-02 9:16:331 hr 43 mins ago0xf6d639fcdd2467139976675fec588ba970e7e599 IN  Wormhole: Token Bridge0 FTM0.006554308638
0x78552bba8e46e5efebf52d5e9965cd2299d6ea117ff96a4db6c32b2ba366c152Complete Transfe...549055402023-02-02 9:03:081 hr 56 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.021364826743
0x399acd0b7dbf593ac4d6065f1ec01ab27a75db4da0aca744a41a2d8c22bc8400Complete Transfe...549053552023-02-02 8:59:342 hrs ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.033266365311
0xa26adde1bdf9e8e802b330b5d308f28d2f6e5e404a072c7387ceaf36c369660cComplete Transfe...549052102023-02-02 8:56:392 hrs 3 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.022680387888
0xe841f3b43a2e1f31ac2d75069efbd4a7f94d9b811696b824b3af7727a09d4eecComplete Transfe...549051482023-02-02 8:55:032 hrs 4 mins ago0xb75af6aac0b676857bd1e0953849593b25f6adec IN  Wormhole: Token Bridge0 FTM0.030128372298
0x9f5774ee8639ee0cd980ab0488b60ca50c2a5305ef11d9aafd2d4cb30334c116Complete Transfe...549050802023-02-02 8:53:322 hrs 6 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.033706531097
0x679fbc9d88ec53f09ad968a55d060f624b15bb6a14eff815dad5daf0802b8b95Complete Transfe...549050542023-02-02 8:52:552 hrs 6 mins ago0xb75af6aac0b676857bd1e0953849593b25f6adec IN  Wormhole: Token Bridge0 FTM0.021287955106
0x59206aa9f1d352c097ee581a8a89d68d84e449f1311444d34d32f6a2452b15daComplete Transfe...549049692023-02-02 8:50:492 hrs 8 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.023882555649
0x7ec7be5b576eeda72800c94684ade737f0787a023e7670a8e06702418fd7e517Complete Transfe...549049672023-02-02 8:50:462 hrs 8 mins ago0xb75af6aac0b676857bd1e0953849593b25f6adec IN  Wormhole: Token Bridge0 FTM0.023886208282
0x15e3e4ae85c81b565fe04822bc36baed8a8f3c6d1a3fc1b23ff310a19fb6261dComplete Transfe...549048352023-02-02 8:47:522 hrs 11 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.023890306748
0x00919d5fff06bb3781f7b46f0bdf9ceb3a51cb24d124a12267a770fc2149ab53Complete Transfe...549048242023-02-02 8:47:382 hrs 12 mins ago0xb75af6aac0b676857bd1e0953849593b25f6adec IN  Wormhole: Token Bridge0 FTM0.023945937699
0xa137d49c1ef12f372de8fc898b7e86e34bc13981781c02edeca4884684f0692fComplete Transfe...549046492023-02-02 8:44:132 hrs 15 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.03080781292
0x48bacb3a2edfa0f4c3cbfc2380f818f23c05a3320ebe2f2fecae7886986fe248Complete Transfe...549045242023-02-02 8:41:302 hrs 18 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.030361102907
0xbcfcb295a11610133d25c6e5ef6bb7628218339201407211302bbb5160f77568Complete Transfe...549043762023-02-02 8:38:092 hrs 21 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.030847218669
0x39e21e802a19c4dbafc15ab253bfa5fe51af1b381ef4abc36185f28408cae4faComplete Transfe...549041002023-02-02 8:32:352 hrs 27 mins ago0x639d2a49bdd0cf37614f46a83e4aa49eaff1e537 IN  Wormhole: Token Bridge0 FTM0.030832767594
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x50cd16ad160c4dd85a7a09dc5d06eca14201f305f296ecb8caf49d50d3049abd544624962023-01-26 9:34:457 days 1 hr ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge30 FTM
0x27789f15f5ffdee6097374585c2395037c4b5559b4f76e7d9e488852a0ef5791540605682023-01-20 1:25:1813 days 9 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge1 FTM
0xdcecd5debc47a9f913f3e02895d2619eb73f7d180e5a014a9055e1ac87bbe185539395082023-01-17 19:01:4515 days 15 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge439,548 FTM
0x69598fd8752da44bcab6993fca2199a1d4c580463eedac37ef598c743a766775537081202023-01-13 19:16:1819 days 15 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge7 FTM
0x5ae7a9adf3a12d5a5d0058d382279fca145edb88a7919da7d7d21c2260d83b45533597972023-01-07 0:53:4526 days 10 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge50 FTM
0xa84216c738fbe53da65688189d0a9857fbdfa0367825825f533e066cf0973f52532575022023-01-05 6:07:3928 days 4 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge490 FTM
0xa06a03fb7523c20502b054b164c7f1d0e41988a63fb42e966bea38387d5ffd95526687182022-12-22 5:31:0042 days 5 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge23.5 FTM
0xa6aa7ad665668d0302b22f1426abee02a67a3ab103d4314e71d26db411a7d803526681092022-12-22 5:19:2642 days 5 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge15 FTM
0x80aef366653ea66b5e3e6d9b12d65ddc7cf087e197a2c5f4fb37a7736e730915524705852022-12-17 12:10:3346 days 22 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge5 FTM
0x7aff7d2dd6c75eda1125a6943d8c4ee83000e72d16409355f022514d1121b38b523409662022-12-14 18:06:5549 days 16 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge21 FTM
0x58d39fa1eabbb0e3201c1c3c8a1551d3e1b46a150397badb25bdd157a23ba9fe522943062022-12-13 21:30:2650 days 13 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge10 FTM
0x0f9653aab87533d536b8fc1cc69b5313942dc4db76fa966e1604fe6b60f0e1f4520325502022-12-08 17:26:1055 days 17 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge88.65442 FTM
0xd8c8a07eb10b1293e19ed8dbc60e44473c35682013fd38ae03a215a9d9503cf1519761382022-12-07 3:22:5757 days 7 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge3 FTM
0xf1ee849031ca0c7f52aeda6fcab43694b5d1b1ff070401c0825fcc271909bd4f514073422022-11-25 1:09:3469 days 9 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge1 FTM
0xd18780aceb6d2c3f0f787fb20cf0b91ac955585faa6446fc9afd6b787c6cd1b3514065202022-11-25 0:37:5869 days 10 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge1 FTM
0x212552eb15b62f1d55d13a74f9cfca750306d846eb3e61fc8e158cac9003e26c514058682022-11-25 0:08:2469 days 10 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge5 FTM
0xebb7efe03146392e1d20513932c7bb372900f2219aa1ecf1b3b6032dba8ff4c3513771612022-11-24 6:55:1970 days 4 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge20 FTM
0x615f243b0a822b3055ccb79f4726c901ebcc529e0c467a1fc405c48823fc4945512201182022-11-21 3:57:4273 days 7 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge1 FTM
0x6f466fbc4eeeb814968b464a3a05b4e61ec34e4544492dacc96e487fa7745a1b511594262022-11-20 0:55:5474 days 10 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge2 FTM
0x514adbb32fa0c8943796b7c86f0d39fbc4090556118f806ea4a1964b4842993f511505522022-11-19 21:39:0674 days 13 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge30 FTM
0xf6ad1d8fbf8908904bae2fe5810bf4381bebab9d6e27e7c6db93740b71d58ce1510321842022-11-17 15:46:3776 days 19 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge137 FTM
0x86b20dbb28bcec12c3624c128121db987f89f196e4bf2dee338900b2eaacc0c9507943312022-11-12 20:22:4781 days 14 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge1,290 FTM
0x792de3c4c0df9b82ceb0e6840b4d04a841bad95bc21857eada361a4bfb3a7eb5507939322022-11-12 20:06:3781 days 14 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge130 FTM
0xa56fa0c30b2585a937482f6c297c62707b646666525d2de14486097b8b78342d506612082022-11-09 7:59:0585 days 3 hrs ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge0.1 FTM
0x398cd7e6ca6db522e090dd3b8e536e58b05b6c244bb550e55b7cc178d5bb5e6c505663782022-11-07 10:02:5187 days 56 mins ago Fantom Finance: Wrapped Fantom Token Wormhole: Token Bridge150 FTM
[ 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
File 1 of 7 : ERC1967Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../Proxy.sol";
import "./ERC1967Upgrade.sol";

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 */
contract ERC1967Proxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
     *
     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
     * function call, and allows 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 2 of 7 : ERC1967Upgrade.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;

import "../beacon/IBeacon.sol";
import "../../utils/Address.sol";
import "../../utils/StorageSlot.sol";

/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 *
 * _Available since v4.1._
 *
 * @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 3 of 7 : 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 4 of 7 : IBeacon.sol
// SPDX-License-Identifier: MIT

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 5 of 7 : Address.sol
// SPDX-License-Identifier: MIT

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 6 of 7 : StorageSlot.sol
// SPDX-License-Identifier: MIT

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 7 of 7 : TokenBridge.sol
// contracts/Wormhole.sol
// SPDX-License-Identifier: Apache 2

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";

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

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

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"}]

608060405234801561001057600080fd5b5060405161078f38038061078f83398101604081905261002f91610314565b818161005c60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61042c565b6000805160206107488339815191521461008657634e487b7160e01b600052600160045260246000fd5b6100928282600061009b565b50505050610491565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b6100291760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101368383604051806060016040528060278152602001610768602791396101fd565b9392505050565b610150816102d260201b6100551760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061074883398151915260001b6102d860201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060833b61025c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161027791906103dd565b600060405180830381855af49150503d80600081146102b2576040519150601f19603f3d011682016040523d82523d6000602084013e6102b7565b606091505b5090925090506102c88282866102db565b9695505050505050565b3b151590565b90565b606083156102ea575081610136565b8251156102fa5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103f9565b60008060408385031215610326578182fd5b82516001600160a01b038116811461033c578283fd5b60208401519092506001600160401b0380821115610358578283fd5b818501915085601f83011261036b578283fd5b81518181111561037d5761037d61047b565b604051601f8201601f19908116603f011681019083821181831017156103a5576103a561047b565b816040528281528860208487010111156103bd578586fd5b6103ce83602083016020880161044f565b80955050505050509250929050565b600082516103ef81846020870161044f565b9190910192915050565b602081526000825180602084015261041881604085016020870161044f565b601f01601f19169190910160400192915050565b60008282101561044a57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561046a578181015183820152602001610452565b838111156100ca5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104a06000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b602081526000825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c651652cc0041da7a6ccfbb62ab4d69a33d006e787e6a41c09cd2b8fb857905d64736f6c63430008040033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008b0b2cd274a608f65f5bc82b2eb5eb1256efbf2f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e43bfa06380000000000000000000000006cbdd436210e19621efaa15db5c730038166b2f3000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000126783a6cb203a3e35344528b26ca3a0489a1485000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000c21603c4f3a6387e241c0091a7ea39e43e90bb700000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c8300000000000000000000000000000000000000000000000000000000

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

0000000000000000000000008b0b2cd274a608f65f5bc82b2eb5eb1256efbf2f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e43bfa06380000000000000000000000006cbdd436210e19621efaa15db5c730038166b2f3000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000126783a6cb203a3e35344528b26ca3a0489a1485000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000c21603c4f3a6387e241c0091a7ea39e43e90bb700000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c8300000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : implementation (address): 0x8b0b2cd274a608f65f5bc82b2eb5eb1256efbf2f
Arg [1] : initData (bytes): 0x3bfa06380000000000000000000000006cbdd436210e19621efaa15db5c730038166b2f3000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000126783a6cb203a3e35344528b26ca3a0489a1485000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000c21603c4f3a6387e241c0091a7ea39e43e90bb700000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000008b0b2cd274a608f65f5bc82b2eb5eb1256efbf2f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e4
Arg [3] : 3bfa06380000000000000000000000006cbdd436210e19621efaa15db5c73003
Arg [4] : 8166b2f300000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000a000000000000000000000000126783a6cb203a3e35344528b26ca3a0
Arg [6] : 489a148500000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [8] : 000000040000000000000000000000000c21603c4f3a6387e241c0091a7ea39e
Arg [9] : 43e90bb700000000000000000000000021be370d5312f44cb42ce377bc9b8a0c
Arg [10] : ef1a4c8300000000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.