Contract 0x8e1e582879cb8bac6283368e8ede458b63f499a5 16

 

Contract Overview

WePiggy: pETH Token
Balance:
124.095936848379648126 ETH

EtherValue:
$442,013.96 (@ $3,561.87/ETH)

Token:
Txn Hash Method
Block
From
To
Value
0x116a8fef4e69ff563614ac3b66316d251ef7df134535967df05a6a27c2d158a1Repay Borrow1180281652024-03-28 19:45:0758 mins ago0xa9ca2e36abd617f3062110802b499bd45fa1574a IN  WePiggy: pETH Token0.0011 ETH0.0000052111520.019133504
0x8a9b0137db0a1f8f2361ef2934f9eb8c893f5704222405f457e1e189cceaf9afRedeem Underlyin...1180197582024-03-28 15:04:535 hrs 38 mins ago0x0c10e3a179c8e9552fbba82950eed6f6161d7004 IN  WePiggy: pETH Token0 ETH0.0000140906940.029359812
0x7461e2e5a0d83c9d8ee180dd6e721572c29ac3c683b5a134d8eaf8c6bd0d0c00Mint1180107492024-03-28 10:04:3510 hrs 38 mins ago0x0e6d4e70487445f3f8c39f0a59923401754062c3 IN  WePiggy: pETH Token0.04 ETH0.0000084395120.028776719
0x9019122c2c9495f0886edf690738890466a6cd9f3b0b45148b2a2ca956621585Mint1180099542024-03-28 9:38:0511 hrs 5 mins ago0xe13752b8e501cf1517208af3d91810a49066b218 IN  WePiggy: pETH Token0.04 ETH0.0000080001840.028589102
0x7c8aebad94a96ed1cd865a02d675e94f2edfa41a742ff77b66b88ea75477df5aRedeem1180094642024-03-28 9:21:4511 hrs 21 mins ago0x86832a00fc9413b919b0c94de35047e43922eb3c IN  WePiggy: pETH Token0 ETH0.0000072750380.029233571
0x77439b9fd8299ef26cf6b7f19c878ab72f24d26fcc74178385fc80490208b99fMint1180094562024-03-28 9:21:2911 hrs 21 mins ago0x86832a00fc9413b919b0c94de35047e43922eb3c IN  WePiggy: pETH Token0.0363 ETH0.0000075212080.029477519
0x0832acbb5f25b87e2864a8a45a2119ee3842ff73fdc82a11b87727171d6241abRedeem1180093362024-03-28 9:17:2911 hrs 25 mins ago0xc66b20b48bacec096e4d8bacd60f0deb8a8c9571 IN  WePiggy: pETH Token0 ETH0.0000097131680.030091389
0x1d8ee1b378f20b41b303a92f77738ed3ef84f500bf00d46d4ba25d1e5b5f73eaRedeem1180086852024-03-28 8:55:4711 hrs 47 mins ago0x6163133837f0d4cc98592cf93549fb7822716a2b IN  WePiggy: pETH Token0 ETH0.0000113146890.02906732
0xdc68eb61bdec73fa19de1c560606a35594e500a2b5a6f289e8275c655541fe6fApprove1179734332024-03-27 13:20:431 day 7 hrs ago0x70dc457e4d02a13a85671538f1211b0d9d7ad08b IN  WePiggy: pETH Token0 ETH0.0000017030320.027296887
0xaad57a6507b510b9604fe0f2e11f50be3c1455e66aa1c0ed6d896c3edb3af608Mint1179729512024-03-27 13:04:391 day 7 hrs ago0x70dc457e4d02a13a85671538f1211b0d9d7ad08b IN  WePiggy: pETH Token0.0005 ETH0.0000044187330.019091541
0xacba1c6daced9f2d2511f0054dd3ca5a43a21fcdfb78b7f3ece5fc941c5324f8Redeem1179675842024-03-27 10:05:451 day 10 hrs ago0x11ceb03c4e8b0458554899d57b75dfc8826c2566 IN  WePiggy: pETH Token0 ETH0.0000029678060.013924478
0x14e186f5ba06aa257201664edfa59ece2339cd827c55189f7fef3bb479c59d09Mint1179675652024-03-27 10:05:071 day 10 hrs ago0x11ceb03c4e8b0458554899d57b75dfc8826c2566 IN  WePiggy: pETH Token0.0098 ETH0.0000032095760.014148916
0xbb7c5ed15c630a08dd642c25d2a059dcbcc1819aca6159f75dcb74eddd105200Redeem1179662912024-03-27 9:22:391 day 11 hrs ago0x01d271ff63fc62646f666287dc79eca756d2efa5 IN  WePiggy: pETH Token0 ETH0.00000358110.016892202
0x71b0a00a0a95745566379066ca69a5e9eb665754dda1c581fc556314dcb1ad8aRedeem1179662812024-03-27 9:22:191 day 11 hrs ago0x01d271ff63fc62646f666287dc79eca756d2efa5 IN  WePiggy: pETH Token0 ETH0.0000029810150.017006852
0xed2c793a267ff3d9007cf5b1fbf5bd0538457fbff892a6744b7d5dd5b013f74aMint1179662752024-03-27 9:22:071 day 11 hrs ago0x01d271ff63fc62646f666287dc79eca756d2efa5 IN  WePiggy: pETH Token0.010768 ETH0.000003867230.017052724
0x2deb74bab604313779a9771e00ae621044d6742dccae023d9531056c64e2b4fbMint1179640912024-03-27 8:09:191 day 12 hrs ago0x6163133837f0d4cc98592cf93549fb7822716a2b IN  WePiggy: pETH Token0.04 ETH0.0000031640120.015115821
0xb91da895d45af16ebd277ffc8e659f1a853ae06dc202d03226f5b54ac7e06b87Mint1179618392024-03-27 6:54:151 day 13 hrs ago0xc66b20b48bacec096e4d8bacd60f0deb8a8c9571 IN  WePiggy: pETH Token0.045 ETH0.0000029629620.014153119
0x521615a0d010f8d510a4950a1354cb553cddfe9320e0a9a0c715bf8cced81beaRedeem1179331582024-03-26 14:58:132 days 5 hrs ago0x6893efbe7fbaccb96d3d5764a599a506f43d1aa8 IN  WePiggy: pETH Token0 ETH0.0000046585750.033525321
0xfcce7df14555c6cef619cccad6439d4078578f8c03e2cfcb02d30fa0cff3a4f6Mint1179331502024-03-26 14:57:572 days 5 hrs ago0x6893efbe7fbaccb96d3d5764a599a506f43d1aa8 IN  WePiggy: pETH Token0.03 ETH0.0000070856030.033783399
0xe3630391dbe0a25a58cadbf94aee930f484ba049f76302d8c00d9dbaf97f6833Redeem1179242322024-03-26 10:00:412 days 10 hrs ago0xdfa503d0af6a24ec6b26ffadb8e20a37ef073084 IN  WePiggy: pETH Token0 ETH0.0000069044580.029984906
0x7753c00a99603da6095203c92632504e8b2cd4adcc972e19cf28d70049328a5bRedeem1179235702024-03-26 9:38:372 days 11 hrs ago0x6163133837f0d4cc98592cf93549fb7822716a2b IN  WePiggy: pETH Token0 ETH0.0000069981880.030372466
0x42767c55a2f8d7cdcfd50c67b8702b205c72c4d868cf162a0e5b6b118dc33e83Redeem1179218732024-03-26 8:42:032 days 12 hrs ago0x2a56c849ded609d2f803ce3a1da072656fbe0753 IN  WePiggy: pETH Token0 ETH0.0000067685630.029373015
0xfb3b6609022373572916a81d6aa55816058c1d78b5ae23d7a3dcf1c47f4380b2Redeem1179215022024-03-26 8:29:412 days 12 hrs ago0xb4eba01bdd33ee4629dc643ab17fe0cd4e6df824 IN  WePiggy: pETH Token0 ETH0.0000069620960.0302181
0x058d0ad1c64eba3e8022f9b72b72f64e72f439d99d6c22c19899b16f348d4597Redeem1179213012024-03-26 8:22:592 days 12 hrs ago0x1b66c545610e6bf5b1d23c2740cfb61028fdc9e6 IN  WePiggy: pETH Token0 ETH0.0000069156080.030013794
0x393b11e41b78a9d0679e24f5a05aa0909225a98fd4c7e05d33f86171a909bbceRedeem1178849812024-03-25 12:12:193 days 8 hrs ago0x6dc35b9d71ee7910259596a300f524821af4d7c5 IN  WePiggy: pETH Token0 ETH0.0000035386050.018263849
[ Download CSV Export 

OVERVIEW

WePiggy is an open source, non-custodial crypto asset lending market protocol. In WePiggy’s market, users can deposit their crypto assets to earn interest, or borrow others by paying interests.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x8a9b0137db0a1f8f2361ef2934f9eb8c893f5704222405f457e1e189cceaf9af1180197582024-03-28 15:04:535 hrs 38 mins ago WePiggy: pETH Token0x0c10e3a179c8e9552fbba82950eed6f6161d70040.02191632 ETH
0x7c8aebad94a96ed1cd865a02d675e94f2edfa41a742ff77b66b88ea75477df5a1180094642024-03-28 9:21:4511 hrs 21 mins ago WePiggy: pETH Token0x86832a00fc9413b919b0c94de35047e43922eb3c0.036299999982696722 ETH
0x0832acbb5f25b87e2864a8a45a2119ee3842ff73fdc82a11b87727171d6241ab1180093362024-03-28 9:17:2911 hrs 25 mins ago WePiggy: pETH Token0xc66b20b48bacec096e4d8bacd60f0deb8a8c95710.045000065972543692 ETH
0x1d8ee1b378f20b41b303a92f77738ed3ef84f500bf00d46d4ba25d1e5b5f73ea1180086852024-03-28 8:55:4711 hrs 47 mins ago WePiggy: pETH Token0x6163133837f0d4cc98592cf93549fb7822716a2b0.040000055010572917 ETH
0xacba1c6daced9f2d2511f0054dd3ca5a43a21fcdfb78b7f3ece5fc941c5324f81179675842024-03-27 10:05:451 day 10 hrs ago WePiggy: pETH Token0x11ceb03c4e8b0458554899d57b75dfc8826c25660.009799999861975588 ETH
0xbb7c5ed15c630a08dd642c25d2a059dcbcc1819aca6159f75dcb74eddd1052001179662912024-03-27 9:22:391 day 11 hrs ago WePiggy: pETH Token0x01d271ff63fc62646f666287dc79eca756d2efa50.010767999918534829 ETH
0x16caa24b65230a90956afa74ab936c90b25840e977b5bf128e8843e2cb455ea31179540402024-03-27 2:34:171 day 18 hrs ago 0xc60924844e628ffd6398d6399488fd0f8b293d3a WePiggy: pETH Token0.00325867217960928 ETH
0x52969c4bd87d1151075b4b7115d0ece858c1f12e784cd3d4cdbe48ecf739b2ae1179540092024-03-27 2:33:151 day 18 hrs ago 0xc60924844e628ffd6398d6399488fd0f8b293d3a WePiggy: pETH Token0.0026171093153252 ETH
0x521615a0d010f8d510a4950a1354cb553cddfe9320e0a9a0c715bf8cced81bea1179331582024-03-26 14:58:132 days 5 hrs ago WePiggy: pETH Token0x6893efbe7fbaccb96d3d5764a599a506f43d1aa80.02999999981965885 ETH
0xe3630391dbe0a25a58cadbf94aee930f484ba049f76302d8c00d9dbaf97f68331179242322024-03-26 10:00:412 days 10 hrs ago WePiggy: pETH Token0xdfa503d0af6a24ec6b26ffadb8e20a37ef0730840.040000151075619216 ETH
0x7753c00a99603da6095203c92632504e8b2cd4adcc972e19cf28d70049328a5b1179235702024-03-26 9:38:372 days 11 hrs ago WePiggy: pETH Token0x6163133837f0d4cc98592cf93549fb7822716a2b0.040000149042480715 ETH
0x42767c55a2f8d7cdcfd50c67b8702b205c72c4d868cf162a0e5b6b118dc33e831179218732024-03-26 8:42:032 days 12 hrs ago WePiggy: pETH Token0x2a56c849ded609d2f803ce3a1da072656fbe07530.040000094040475054 ETH
0xfb3b6609022373572916a81d6aa55816058c1d78b5ae23d7a3dcf1c47f4380b21179215022024-03-26 8:29:412 days 12 hrs ago WePiggy: pETH Token0xb4eba01bdd33ee4629dc643ab17fe0cd4e6df8240.037000088283057162 ETH
0x058d0ad1c64eba3e8022f9b72b72f64e72f439d99d6c22c19899b16f348d45971179213012024-03-26 8:22:592 days 12 hrs ago WePiggy: pETH Token0x1b66c545610e6bf5b1d23c2740cfb61028fdc9e60.036000085209662617 ETH
0x393b11e41b78a9d0679e24f5a05aa0909225a98fd4c7e05d33f86171a909bbce1178849812024-03-25 12:12:193 days 8 hrs ago WePiggy: pETH Token0x6dc35b9d71ee7910259596a300f524821af4d7c50.010936999818162536 ETH
0xfe2e28ebc85a85ef547789322b84d82bba314ff0e39369e3bf9b4778e53b5b081178819052024-03-25 10:29:473 days 10 hrs ago WePiggy: pETH Token0x239540ab643275a00de099fe4ee6ff1bac1a93b40.015399999824837965 ETH
0x5d3476752f2d0a4ade73fb53709d38e8f6ccea594b1ff15f88ab81e34706383f1178817382024-03-25 10:24:133 days 10 hrs ago WePiggy: pETH Token0x2a873cf733033fe02ad2bb79cd7c2207cd8a2d360.020999999931332031 ETH
0x6543e70d062098d029ab6d1093365688d40700929560875badb3287cde9e0c4a1178442602024-03-24 13:34:574 days 7 hrs ago WePiggy: pETH Token0xb10bd5cfe2744fbe2916d2a7dc59a939617dfe1b0.00200926 ETH
0xa110fb02f9e711c16a03f1f6f82414ccbe54015c5a5b9621f0f728a3145f4f321178442422024-03-24 13:34:214 days 7 hrs ago 0x2b7f68170a598e507b19bca41ed745eabc936b3f WePiggy: pETH Token0.001484115873358644 ETH
0xb6844fb4de590546edfb54e6a88858a5a42ec1f01046fd1fc94980771dfa4ddf1178300542024-03-24 5:41:254 days 15 hrs ago 0x6f0878b34164a9c6a400f1ffd1ecb7b27a47075c WePiggy: pETH Token0.001175545866830828 ETH
0x759bb0e8bb50517bb8431228b8889d9ec7da9ab2652a594f46fa5040fdad6bf71178002832024-03-23 13:09:035 days 7 hrs ago WePiggy: pETH Token0xc8e5fea3380eeaf851169ab743211f94115a0c520.040399999891629218 ETH
0x18bd8706904a9e4e4686dba86e3d0ae03eba6ad48a59174779e68f62c2680e4e1177591012024-03-22 14:16:196 days 6 hrs ago WePiggy: pETH Token0x5e849756d9c0c43736212d9058535408f50686a20.010959999923260068 ETH
0x2d8f98b698fd7e7c7dab453f773ef64745944cd4bde5b27943e381bc912bd3921177572402024-03-22 13:14:176 days 7 hrs ago WePiggy: pETH Token0x9c1a6fc022242c4a0dafe0c1f32e3d6184df260b0.013429999982489447 ETH
0xaf9988410792f35bdac2bcae93e1bcebbe849bd4c681a04c011b1ed7b61131cb1177506582024-03-22 9:34:536 days 11 hrs ago WePiggy: pETH Token0xf62117fc0cba306de15f5d5a8d30ec88b4464d650.021449999911980205 ETH
0x5647a54f01ddc26383ff96fe70b064b7816bf8f8a1c8f0844662ffa08595e07c1177486212024-03-22 8:26:596 days 12 hrs ago WePiggy: pETH Token0x07310d0644d1da1c4d3fd69d3cede8b11041d8990.031999999828020507 ETH
[ Download CSV Export 
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xf18D727C034f47AE2C0FE221C1cf4A15f0557b5F
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
TransparentUpgradeableProxy

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Optimistic.Etherscan.io on 2021-11-13
*/

// 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
        }
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

/**
 * @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 {
        _setImplementation(newImplementation);
        emit Upgraded(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
            _setImplementation(newImplementation);
            emit Upgraded(newImplementation);
        }
    }

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

    /**
     * @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 This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback () external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive () external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {
    }
}

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 */
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();
    }
}

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

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _getAdmin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        _changeAdmin(newAdmin);
    }

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

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address) {
        return _getAdmin();
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610707565b610164565b3480156100a457600080fd5b506100ad6101da565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b610217565b3480156100f557600080fd5b506100ad610241565b6101066102a2565b610116610111610346565b610355565b565b610120610379565b6001600160a01b0316336001600160a01b0316141561015957610154816040518060200160405280600081525060006103ac565b610161565b6101616100fe565b50565b61016c610379565b6001600160a01b0316336001600160a01b031614156101cd576101c88383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506103ac915050565b6101d5565b6101d56100fe565b505050565b60006101e4610379565b6001600160a01b0316336001600160a01b0316141561020c57610205610346565b9050610214565b6102146100fe565b90565b61021f610379565b6001600160a01b0316336001600160a01b03161415610159576101548161040b565b600061024b610379565b6001600160a01b0316336001600160a01b0316141561020c57610205610379565b606061029183836040518060600160405280602781526020016108016027913961045f565b9392505050565b803b15155b919050565b6102aa610379565b6001600160a01b0316336001600160a01b031614156103415760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b610116565b600061035061053a565b905090565b3660008037600080366000845af43d6000803e808015610374573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316905090565b6103b583610562565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806103f65750805b156101d557610405838361026c565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610434610379565b604080516001600160a01b03928316815291841660208301520160405180910390a161016181610611565b606061046a84610298565b6104c55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610338565b600080856001600160a01b0316856040516104e09190610785565b600060405180830381855af49150503d806000811461051b576040519150601f19603f3d011682016040523d82523d6000602084013e610520565b606091505b509150915061053082828661069d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61039d565b61056b81610298565b6105cd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610338565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381166106765760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610338565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036105f0565b606083156106ac575081610291565b8251156106bc5782518084602001fd5b8160405162461bcd60e51b815260040161033891906107a1565b80356001600160a01b038116811461029d57600080fd5b6000602082840312156106fe578081fd5b610291826106d6565b60008060006040848603121561071b578182fd5b610724846106d6565b9250602084013567ffffffffffffffff80821115610740578384fd5b818601915086601f830112610753578384fd5b813581811115610761578485fd5b876020828501011115610772578485fd5b6020830194508093505050509250925092565b600082516107978184602087016107d4565b9190910192915050565b60006020825282518060208401526107c08160408501602087016107d4565b601f01601f19169190910160400192915050565b60005b838110156107ef5781810151838201526020016107d7565b83811115610405575050600091015256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122093f028255035b61df476b13b9dba3c4f06f60e51b9b4caee31680b389aef327f64736f6c63430008020033

Deployed ByteCode Sourcemap

23503:3618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20432:11;:9;:11::i;:::-;23503:3618;;20200:11;:9;:11::i;25934:136::-;;;;;;;;;;-1:-1:-1;25934:136:0;;;;;:::i;:::-;;:::i;26455:166::-;;;;;;:::i;:::-;;:::i;25317:131::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1556:32:1;;;1538:51;;1526:2;1511:18;25317:131:0;;;;;;;25662:105;;;;;;;;;;-1:-1:-1;25662:105:0;;;;;:::i;:::-;;:::i;24748:98::-;;;;;;;;;;;;;:::i;19836:113::-;19885:17;:15;:17::i;:::-;19913:28;19923:17;:15;:17::i;:::-;19913:9;:28::i;:::-;19836:113::o;25934:136::-;24203:11;:9;:11::i;:::-;-1:-1:-1;;;;;24189:25:0;:10;-1:-1:-1;;;;;24189:25:0;;24185:103;;;26008:54:::1;26026:17;26045:9;;;;;;;;;;;::::0;26056:5:::1;26008:17;:54::i;:::-;24185:103:::0;;;24265:11;:9;:11::i;:::-;25934:136;:::o;26455:166::-;24203:11;:9;:11::i;:::-;-1:-1:-1;;;;;24189:25:0;:10;-1:-1:-1;;;;;24189:25:0;;24185:103;;;26565:48:::1;26583:17;26602:4;;26565:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26608:4:0::1;::::0;-1:-1:-1;26565:17:0::1;::::0;-1:-1:-1;;26565:48:0:i:1;:::-;24185:103:::0;;;24265:11;:9;:11::i;:::-;26455:166;;;:::o;25317:131::-;25369:23;24203:11;:9;:11::i;:::-;-1:-1:-1;;;;;24189:25:0;:10;-1:-1:-1;;;;;24189:25:0;;24185:103;;;25423:17:::1;:15;:17::i;:::-;25405:35;;24185:103:::0;;;24265:11;:9;:11::i;:::-;25317:131;:::o;25662:105::-;24203:11;:9;:11::i;:::-;-1:-1:-1;;;;;24189:25:0;:10;-1:-1:-1;;;;;24189:25:0;;24185:103;;;25737:22:::1;25750:8;25737:12;:22::i;24748:98::-:0;24791:14;24203:11;:9;:11::i;:::-;-1:-1:-1;;;;;24189:25:0;:10;-1:-1:-1;;;;;24189:25:0;;24185:103;;;24827:11:::1;:9;:11::i;8878:200::-:0;8961:12;8993:77;9014:6;9022:4;8993:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;8986:84;8878:200;-1:-1:-1;;;8878:200:0:o;3193:422::-;3560:20;;3599:8;;3193:422;;;;:::o;26908:210::-;26994:11;:9;:11::i;:::-;-1:-1:-1;;;;;26980:25:0;:10;-1:-1:-1;;;;;26980:25:0;;;26972:104;;;;-1:-1:-1;;;26972:104:0;;3727:2:1;26972:104:0;;;3709:21:1;3766:2;3746:18;;;3739:30;3805:34;3785:18;;;3778:62;3876:34;3856:18;;;3849:62;-1:-1:-1;;;3927:19:1;;;3920:33;3970:19;;26972:104:0;;;;;;;;;27087:23;19836:113;21881:142;21948:12;21980:35;:33;:35::i;:::-;21973:42;;21881:142;:::o;18429:915::-;18829:14;18826:1;18823;18810:34;19047:1;19044;19028:14;19025:1;19009:14;19002:5;18989:60;19126:16;19123:1;19120;19105:38;19166:6;19235:38;;;;19307:16;19304:1;19297:27;19235:38;19254:16;19251:1;19244:27;15737:124;15781:7;15461:66;15808:39;:45;-1:-1:-1;;;;;15808:45:0;;-1:-1:-1;15737:124:0;:::o;12742:321::-;12851:37;12870:17;12851:18;:37::i;:::-;12904:27;;-1:-1:-1;;;;;12904:27:0;;;;;;;;12960:1;12946:4;:11;:15;:28;;;;12965:9;12946:28;12942:114;;;12991:53;13020:17;13039:4;12991:28;:53::i;:::-;;12742:321;;;:::o;16270:138::-;16335:35;16348:11;:9;:11::i;:::-;16335:35;;;-1:-1:-1;;;;;1830:15:1;;;1812:34;;1882:15;;;1877:2;1862:18;;1855:43;1747:18;16335:35:0;;;;;;;16381:19;16391:8;16381:9;:19::i;9272:423::-;9383:12;9416:18;9427:6;9416:10;:18::i;:::-;9408:69;;;;-1:-1:-1;;;9408:69:0;;3320:2:1;9408:69:0;;;3302:21:1;3359:2;3339:18;;;3332:30;3398:34;3378:18;;;3371:62;-1:-1:-1;;;3449:18:1;;;3442:36;3495:19;;9408:69:0;3292:228:1;9408:69:0;9551:12;9565:23;9592:6;-1:-1:-1;;;;;9592:19:0;9612:4;9592:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9550:67;;;;9635:52;9653:7;9662:10;9674:12;9635:17;:52::i;:::-;9628:59;9272:423;-1:-1:-1;;;;;;9272:423:0:o;11833:142::-;11886:7;11552:66;11913:48;1696:40;12071:262;12153:37;12172:17;12153:18;:37::i;:::-;12145:95;;;;-1:-1:-1;;;12145:95:0;;2906:2:1;12145:95:0;;;2888:21:1;2945:2;2925:18;;;2918:30;2984:34;2964:18;;;2957:62;-1:-1:-1;;;3035:18:1;;;3028:43;3088:19;;12145:95:0;2878:235:1;12145:95:0;12308:17;11552:66;12251:48;:74;;-1:-1:-1;;;;;;12251:74:0;-1:-1:-1;;;;;12251:74:0;;;;;;;;;;-1:-1:-1;12071:262:0:o;15948:204::-;-1:-1:-1;;;;;16012:22:0;;16004:73;;;;-1:-1:-1;;;16004:73:0;;2499:2:1;16004:73:0;;;2481:21:1;2538:2;2518:18;;;2511:30;2577:34;2557:18;;;2550:62;-1:-1:-1;;;2628:18:1;;;2621:36;2674:19;;16004:73:0;2471:228:1;16004:73:0;16136:8;15461:66;16088:39;1696:40;9703:742;9818:12;9847:7;9843:595;;;-1:-1:-1;9878:10:0;9871:17;;9843:595;9992:17;;:21;9988:439;;10255:10;10249:17;10316:15;10303:10;10299:2;10295:19;10288:44;10203:148;10398:12;10391:20;;-1:-1:-1;;;10391:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:715::-;;;;541:2;529:9;520:7;516:23;512:32;509:2;;;562:6;554;547:22;509:2;590:29;609:9;590:29;:::i;:::-;580:39;;670:2;659:9;655:18;642:32;693:18;734:2;726:6;723:14;720:2;;;755:6;747;740:22;720:2;798:6;787:9;783:22;773:32;;843:7;836:4;832:2;828:13;824:27;814:2;;870:6;862;855:22;814:2;915;902:16;941:2;933:6;930:14;927:2;;;962:6;954;947:22;927:2;1012:7;1007:2;998:6;994:2;990:15;986:24;983:37;980:2;;;1038:6;1030;1023:22;980:2;1074;1070;1066:11;1056:21;;1096:6;1086:16;;;;;499:609;;;;;:::o;1113:274::-;;1280:6;1274:13;1296:53;1342:6;1337:3;1330:4;1322:6;1318:17;1296:53;:::i;:::-;1365:16;;;;;1250:137;-1:-1:-1;;1250:137:1:o;1909:383::-;;2058:2;2047:9;2040:21;2090:6;2084:13;2133:6;2128:2;2117:9;2113:18;2106:34;2149:66;2208:6;2203:2;2192:9;2188:18;2183:2;2175:6;2171:15;2149:66;:::i;:::-;2276:2;2255:15;-1:-1:-1;;2251:29:1;2236:45;;;;2283:2;2232:54;;2030:262;-1:-1:-1;;2030:262:1:o;4000:258::-;4072:1;4082:113;4096:6;4093:1;4090:13;4082:113;;;4172:11;;;4166:18;4153:11;;;4146:39;4118:2;4111:10;4082:113;;;4213:6;4210:1;4207:13;4204:2;;;-1:-1:-1;;4248:1:1;4230:16;;4223:27;4053:205::o

Swarm Source

ipfs://93f028255035b61df476b13b9dba3c4f06f60e51b9b4caee31680b389aef327f
Block Transaction Difficulty Gas Used Reward
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.