Contract 0xAf41a65F786339e7911F4acDAD6BD49426F2Dc6b 7

Bridge 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa33f4931a75606f00cc361f5393c1be58ba78519ea5e7a37ca42ad92a86fcf66Mint552239132023-02-06 22:27:3614 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.014800293785
0x5ada65d773e00511d679ca07f1c4059578655eaf33874f00669a8c9cd4701949Mint And Swap552232682023-02-06 22:15:0826 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.030552369755
0x60931af6fd51a86f4a20cbfb9dad59b087ea464fdbef33100a722cb9e0f7748aMint And Swap552227872023-02-06 22:05:5135 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.029835389936
0x325a93a206698f4940ca8e3a8561333ac3ef5b391e745eb0349ebe4f46e17d81Mint552227282023-02-06 22:04:4137 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.014047333623
0x3039dc0bd47db919250d67f22f646a6088865d06068da25842ea5e3cb5ccd952Mint And Swap552221192023-02-06 21:52:4648 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.02527742496
0x57674bf8f22f484d5e31c515cedacf9d4699d91eb5e2be63e4db0d28a9ce7f23Mint And Swap552220172023-02-06 21:50:5150 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.02527034246
0x90377d18aed0dba70857464bd646278d18f94000063ac9123a7017b968793f8aMint And Swap552218652023-02-06 21:48:0153 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.033027406301
0xd3f14315e9e4e03de5520d9873a71fd1441dc561a5297926ca617e78b7fcfedaMint And Swap552210492023-02-06 21:32:051 hr 9 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.027356713222
0x0abf2aaebb9834be4709977f4e1c799d282641c3abc08270593369dd4032c721Mint And Swap552189682023-02-06 20:50:021 hr 51 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.02611632049
0x4523a57e2f9b18d138e42496020ee9929b5540bf204f7fb16f6bcd18481f14dbMint And Swap552187702023-02-06 20:46:181 hr 55 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.031005365506
0x7aec3d57d7ecd93aa9d3747faa6ae631bf511b8d43e00d2cb980d72afe24d593Mint And Swap552176262023-02-06 20:20:572 hrs 20 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.031239124071
0x411213e0575c91b47d56102855b233daada4eded461833c2aff444b663122c56Mint And Swap552156222023-02-06 19:40:263 hrs 1 min agoSynapse: Executor IN  Synapse: Bridge0 FTM0.035072523806
0x4767a8897d08892fdba578c5c8d38cf93492ef3b21e933aff2c176b59e729c82Mint And Swap552137072023-02-06 19:04:353 hrs 37 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.02809894857
0xb474c8c5463900dbf0b8a74167ecf68e8aaf6916e6533e44f625dd3a7267befeMint And Swap552129812023-02-06 18:51:093 hrs 50 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.037410013605
0xeff7cd98c6195c52d31ac9571ec693a19ad6673141405d085d1288b072258776Mint And Swap552122532023-02-06 18:36:464 hrs 4 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.029911911234
0x824a47726abe40de73b35d443b9d1b9ce0dad7ac3769e6c7c53e281b121a8ff9Mint And Swap552110012023-02-06 18:10:374 hrs 31 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.037060425899
0xa350479d0d57be940a0b411b18ffde69caa8b36235772f2d85606584cd192f49Mint And Swap552093772023-02-06 17:37:165 hrs 4 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.046115952398
0x767b4efc0eb02ae3d0943cca9b0414524acca66e3318b9f7c1b7eeb31acd4822Mint And Swap552092542023-02-06 17:34:515 hrs 6 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.039910322847
0xfff7b556028a98d08ab688faab14961b1cf9f78e6f2fa84e2626f9dd71b17d23Mint And Swap552090732023-02-06 17:31:185 hrs 10 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.046830962035
0xdef8c665ff79717f365d9cabef7f798cdd87721a852a493384eeffbaddd07048Mint And Swap552089962023-02-06 17:29:465 hrs 11 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.047940123632
0xd76c218589b2dbacde7ef31c1570ce5798941df1b53e11bab2deb5f1d9a9571eMint And Swap552086242023-02-06 17:22:225 hrs 19 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.044538146471
0xe2dd64e180f26a87ea655c985d91004bc98c4fb34dc9154f3484352ea1a1bfd7Mint And Swap552082122023-02-06 17:14:075 hrs 27 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.043759887313
0x1778543898ddeb7c1490f393a54170fb9f2cf4a821385f332a27299bf6f63525Mint And Swap552072982023-02-06 16:55:205 hrs 46 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.067154346906
0x7787dd97896b655513e958a8509f9fbc1310384bea257691d071cd1c07d9cd75Mint And Swap552062172023-02-06 16:35:426 hrs 6 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.054163527054
0x2a28b8402177f54d79ba15bf172ebd6047687aece4b058938484097fd5effe21Mint And Swap552046082023-02-06 16:05:276 hrs 36 mins agoSynapse: Executor IN  Synapse: Bridge0 FTM0.03565770383
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0183db984a3f2d3b487937aec0f8f728ce94935898786c6af97d17ecf86873c5551404492023-02-05 14:29:391 day 8 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge995.999 FTM
0xdf8942e6fe7da50c20dbc5805ba84575899d52b9a6b27ff981acd4f103476a41547079672023-01-30 7:55:067 days 14 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge222 FTM
0xf51eabc9f6e6e358a88f25a86bca32c18110d45b0daf4f0da7b0a4d0e1b554b7545440062023-01-27 13:09:3410 days 9 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge14.46 FTM
0xcdeb2f379b4c72d36e679e83e9662266b9756b459cad9e02373704d655df6657540221522023-01-19 4:38:0118 days 18 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge654 FTM
0xe06dbb686273ea100b998c2bd1f30931880e6b6068bc96c48e3d9e98ee33bd01538880612023-01-16 18:20:4421 days 4 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge1,104.99 FTM
0x46944aab3012ded62ad44c3796fd57afa8a558dcf3c7bd1f45228fe4070b9c8a538269992023-01-15 20:28:1922 days 2 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge54.5 FTM
0x9ff7cca5562bcd165cb6648f2c6b0b892917d7006fe998dd6902e458b6e1da9f537583942023-01-14 14:30:4423 days 8 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge747.99 FTM
0x4f45cc6da13ffefbf153dc7a916707541f1dd9be234305b42bdc51b89b0fc4c9535199822023-01-10 3:56:2327 days 18 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge7.5396077945827 FTM
0xe092fbc0c9160decf0843dcb167976823a27bfb4fa71b62912f950358649bb13532297402023-01-04 19:28:4133 days 3 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge1.29 FTM
0xb1937709c07e0da428fc92d52befb4b7eea9b8420a877f8180fa8eabe0c2518b525224462022-12-18 22:59:1549 days 23 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge2.74783012828298 FTM
0x7d0e135cd4e21e07615dfdd1eb266f3bad22727c62e25d7d0ec7376f51f862bf524030302022-12-15 19:55:2353 days 2 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge406.78 FTM
0xb0fddaee6ae3fd064e5800f37569cdc987356222eac1737dcb7293bc4084a746521380422022-12-11 1:51:1457 days 20 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge7,904.088 FTM
0xdf34d0ef37f9be750c74f0799f0c01356e69dcb4b7c67d34fac4ef779e0714ca519973292022-12-07 16:45:2561 days 5 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge25.2 FTM
0x740aec41a0e98d4bd5cb21626b94e4b6ca824cbefe4f8ed8c5a5f79d2a82756f516750852022-11-30 17:14:2468 days 5 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge99.72 FTM
0xd5388b5ae8c826c30d573530e021d0e9870ba375038815f2fdca3a5929688875516742662022-11-30 16:43:2868 days 5 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge8 FTM
0x258a7ba67d4c94e21e1eb06badb13994d9c9e9397efbf1829f5774982f7d8a9b516742562022-11-30 16:43:0468 days 5 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge3 FTM
0x6f3840ed6a39a8d1015b9281687f376004582b989bd16f9f2d1e02deba463b16515412142022-11-28 7:56:0370 days 14 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge10,603.510875 FTM
0xd6769555ec91c50e42417537d61437ecb271be5d9b5e35bff25ec1054b05902c513341492022-11-23 9:14:4475 days 13 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge59.4518 FTM
0x8d6adbceac9be85c94c288b5c7e107179ad993ae883f314e6fb6c7da149ac4bc512177162022-11-21 3:03:2277 days 19 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge7,282.71 FTM
0xa24d544ee825dc05f00d52b254c4281b82d0c28870be62f5ae3d90c39283c6c4509878742022-11-16 19:18:0782 days 3 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge5,987.007 FTM
0xab06b08376cfc2d3c8325ee0408b4949f9eee46f5d9963dc1a2f5649cff25aec508336272022-11-13 22:03:1885 days 38 mins ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge602.99 FTM
0xade795f8fd9355eb650056c2a640c77ea859e0d79e053d03e15bd40b32ab5321508085032022-11-13 5:34:2985 days 17 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge95.9999999 FTM
0x50e10e908cb2573d9e1cde2e37182cb56f91dcba7e3543d8d1e0cb9e207f6e2f507783352022-11-12 4:18:1586 days 18 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge193.55697 FTM
0x7703d51e3d96300cb19c61984920282e440156bab909e8c6934d9f71ad179032507783292022-11-12 4:17:4186 days 18 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge198 FTM
0x21a69d206d7af54024f7b44c1c997038e9cd91d745650e2ad81132f3d2e3a9ff507783102022-11-12 4:16:0986 days 18 hrs ago Fantom Finance: Wrapped Fantom Token Synapse: Bridge98 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x30342EBb1fa044A9BBFd4256973B5f551e654103

Contract Name:
TransparentUpgradeableProxy

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 4: TransparentUpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

import "./UpgradeableProxy.sol";

/**
 * @dev This contract implements a proxy that is upgradeable by an admin.
 * 
 * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
 * clashing], which can potentially be used in an attack, this contract uses the
 * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
 * things that go hand in hand:
 * 
 * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
 * that call matches one of the admin functions exposed by the proxy itself.
 * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
 * implementation. If the admin tries to call a function on the implementation it will fail with an error that says
 * "admin cannot fallback to proxy target".
 * 
 * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
 * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
 * to sudden errors when trying to call a function from the proxy implementation.
 * 
 * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
 * you should think of the `ProxyAdmin` instance as the real administrative inerface 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 initialLogic, address initialAdmin, bytes memory _data) payable UpgradeableProxy(initialLogic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _setAdmin(initialAdmin);
    }

    /**
     * @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) {
        return _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) {
        return _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 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 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 ifAdmin {
        _upgradeTo(newImplementation);
        // solhint-disable-next-line avoid-low-level-calls
        (bool success,) = newImplementation.delegatecall(data);
        require(success);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view 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 override virtual {
        require(msg.sender != _admin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

File 1 of 4: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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);
            }
        }
    }
}

File 2 of 4: Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.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 {
        // 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 virtual view 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 {
        _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 () payable external {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive () payable external {
        _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 4: UpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

import "./Proxy.sol";
import "./Address.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.
 * 
 * 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) payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _setImplementation(_logic);
        if(_data.length > 0) {
            // solhint-disable-next-line avoid-low-level-calls
            (bool success,) = _logic.delegatecall(_data);
            require(success);
        }
    }

    /**
     * @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 override view 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 {
        _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)
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialLogic","type":"address"},{"internalType":"address","name":"initialAdmin","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":"","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":"","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"}]

6080604052604051610aaa380380610aaa8339818101604052606081101561002657600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005157600080fd5b90830190602082018581111561006657600080fd5b825164010000000081118282018810171561008057600080fd5b82525081516020918201929091019080838360005b838110156100ad578181015183820152602001610095565b50505050905090810190601f1680156100da5780820380516001836020036101000a031916815260200191505b50604052508491508290506100ee826101bf565b8051156101a6576000826001600160a01b0316826040518082805190602001908083835b602083106101315780518252601f199092019160209182019101610112565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610191576040519150601f19603f3d011682016040523d82523d6000602084013e610196565b606091505b50509050806101a457600080fd5b505b506101ae9050565b6101b782610231565b505050610291565b6101d28161025560201b6104bb1760201c565b61020d5760405162461bcd60e51b8152600401808060200182810382526036815260200180610a746036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061028957508115155b949350505050565b6107d4806102a06000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146101425780638f28397014610180578063f851a440146101c05761006d565b80633659cfe6146100755780634f1ef286146100b55761006d565b3661006d5761006b6101d5565b005b61006b6101d5565b34801561008157600080fd5b5061006b6004803603602081101561009857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ef565b61006b600480360360408110156100cb57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561010357600080fd5b82018360208201111561011557600080fd5b8035906020019184600183028401116401000000008311171561013757600080fd5b509092509050610243565b34801561014e57600080fd5b50610157610317565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561018c57600080fd5b5061006b600480360360208110156101a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661036e565b3480156101cc57600080fd5b50610157610476565b6101dd6104f7565b6101ed6101e861058b565b6105b0565b565b6101f76105d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023857610233816105f9565b610240565b6102406101d5565b50565b61024b6105d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561030a57610287836105f9565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040518083838082843760405192019450600093509091505080830381855af49150503d80600081146102f1576040519150601f19603f3d011682016040523d82523d6000602084013e6102f6565b606091505b505090508061030457600080fd5b50610312565b6103126101d5565b505050565b60006103216105d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103635761035c61058b565b905061036b565b61036b6101d5565b90565b6103766105d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102385773ffffffffffffffffffffffffffffffffffffffff8116610415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806106ed603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61043e6105d4565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a161023381610646565b60006104806105d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103635761035c6105d4565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906104ef57508115155b949350505050565b6104ff6105d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604281526020018061075d6042913960600191505060405180910390fd5b6101ed6101ed565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156105cf573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106028161066a565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610673816104bb565b6106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806107276036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f20616464726573735570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a2646970667358221220b141ef72de179b8b56cef31601d40ff2875391088197e73cac39eba1ddcd0fdd64736f6c634300070600335570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374000000000000000000000000a71c4ab423d2d7a24b95d2e803c217d911258cdf0000000000000000000000005c750051a5e28ad9f310e12148e68baf4185d2d400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

1574:4746:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:11:1;:9;:11::i;:::-;1574:4746:2;;2654:11:1;:9;:11::i;4600:111:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4600:111:2;;;;:::i;5097:299::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5097:299:2;;-1:-1:-1;5097:299:2;-1:-1:-1;5097:299:2;:::i;3866:104::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4186:246;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4186:246:2;;;;:::i;3307:86::-;;;;;;;;;;;;;:::i;2306:105:1:-;2347:17;:15;:17::i;:::-;2375:28;2385:17;:15;:17::i;:::-;2375:9;:28::i;:::-;2306:105::o;4600:111:2:-;2763:8;:6;:8::i;:::-;2749:22;;:10;:22;;;2745:100;;;4674:29:::1;4685:17;4674:10;:29::i;:::-;2745:100:::0;;;2822:11;:9;:11::i;:::-;4600:111;:::o;5097:299::-;2763:8;:6;:8::i;:::-;2749:22;;:10;:22;;;2745:100;;;5207:29:::1;5218:17;5207:10;:29::i;:::-;5308:12;5325:17;:30;;5356:4;;5325:36;;;;;;;;;;::::0;;::::1;::::0;-1:-1:-1;5325:36:2::1;::::0;-1:-1:-1;5325:36:2;;-1:-1:-1;;5325:36:2;;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5307:54;;;5380:7;5372:16;;;::::0;::::1;;2788:1;2745:100:::0;;;2822:11;:9;:11::i;:::-;5097:299;;;:::o;3866:104::-;3918:7;2763:8;:6;:8::i;:::-;2749:22;;:10;:22;;;2745:100;;;3945:17:::1;:15;:17::i;:::-;3938:24;;2745:100:::0;;;2822:11;:9;:11::i;:::-;3866:104;:::o;4186:246::-;2763:8;:6;:8::i;:::-;2749:22;;:10;:22;;;2745:100;;;4261:22:::1;::::0;::::1;4253:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4362:32;4375:8;:6;:8::i;:::-;4362:32;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;4405:19;4415:8;4405:9;:19::i;3307:86::-:0;3350:7;2763:8;:6;:8::i;:::-;2749:22;;:10;:22;;;2745:100;;;3377:8:::1;:6;:8::i;743:619:0:-:0;803:4;1271:20;;1114:66;1311:23;;;;;;:42;;-1:-1:-1;1338:15:0;;;1311:42;1303:51;743:619;-1:-1:-1;;;;743:619:0:o;6110:207:2:-;6196:8;:6;:8::i;:::-;6182:22;;:10;:22;;;;6174:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6286:23;:21;:23::i;1994:248:3:-;1844:66;2213:11;;2190:45::o;906:907:1:-;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:38;;;;1776:16;1773:1;1766:27;1704:38;1723:16;1720:1;1713:27;5462:219:2;2502:66;5652:11;;5630:44::o;2369:155:3:-;2436:37;2455:17;2436:18;:37::i;:::-;2489:27;;;;;;;;;;;2369:155;:::o;5768:216:2:-;2502:66;5944:22;5929:48::o;2620:369:3:-;2702:37;2721:17;2702:18;:37::i;:::-;2694:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:66;2940:31;2925:57::o

Swarm Source

ipfs://b141ef72de179b8b56cef31601d40ff2875391088197e73cac39eba1ddcd0fdd
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.