Contract 0x0000007D51dA8BF5cA07Fdd1E0970fa3fD8B92bD

Contract Overview

Balance:
0 ETH
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb2a6a9c0c65cbf9ae1a4ba2073db3620049f0b5956776bd6b08c24057e455afbReport Result6478942023-04-28 3:55:3537 days 19 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.00011644233
0x9808eaed914b84edfa316ff8e9f34d8cd21e2c9ac717ca262b114c771f7297b9Report Result6470272023-04-28 0:23:1137 days 23 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.00011645565
0x6082e8a45d8ea10c3bc2a3ae0fe2b348900ac2e4e7e0b0f3b44ffc96de338771Report Result Ba...6431672023-04-27 10:22:4038 days 13 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.00501926016
0xf23ceab4d64a573e02a683dd08b8e35d92f21b52d7143faf28754763ebe90225Report Result Ba...6431632023-04-27 10:15:5238 days 13 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.001424836182
0xa37849404a80bb176f00cad1b9c5030b55ca81175391de6648acd5f13d98ed1cReport Result Ba...6431612023-04-27 10:15:5238 days 13 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.001478401452
0x7362f10c7bded0bf83ca0232d5de6089949190be1a55b4da2834a86562dee8d1Report Result Ba...6431582023-04-27 10:15:5238 days 13 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.001424836182
0x0cfa02122ace05f2a180843376a68ba3be65d438c1aabbed0a0a99842c68036dReport Result6429532023-04-27 9:19:3938 days 14 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.002293913901
0x318d8cfdea01bff08be74df8de95a4dd49ce41ceedb0c26694a2a2881481c932Report Result6418792023-04-27 3:57:3438 days 19 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.00011644233
0x27156063273ca8c9b4f0351026aae2e2918ca1fb491ddac5b91738a4888b2227Report Result6406072023-04-27 0:25:5238 days 23 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.00011644233
0x69fa76b1cb861c4aa933cb4b382faec1177bb864b53429eca236fd6ca7767a58Report Result6372072023-04-26 19:57:1639 days 3 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000147898675
0x27beb7f087ad38af84dcb0b9d09c2ad687c99fcac1b9ce39e3e1c2d8aa266e31Report Result6372012023-04-26 19:53:2739 days 3 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000051006919
0x3f562b3445af218f2c952caff69aea0fc789212230e8a5f69a28625fc34d6c5aReport Result6371592023-04-26 19:48:1239 days 4 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000170005801
0x6c044ab3686d50f1756d14eeaa8d8f208e125baddb8853c03ee0c5045c08685eReport Result6358292023-04-26 14:35:5039 days 9 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.0011642901
0xd83016effaa0af1b8a095f0b91d4a8c0669f3b86f206eac7f27463f6d542ba87Report Result6358262023-04-26 14:35:5039 days 9 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000812101752
0x802643f5b5f758359629d0b4e0019d2d6eeae2923f860c50dd511b0c6164150fReport Result6358232023-04-26 14:27:5339 days 9 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000366531634
0x41cd8bb6452c0e9dba6420f37a045b0ad90bcec48e504d60c81d27392063ec46Report Result6358202023-04-26 14:27:5339 days 9 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.00042800934
0x440d94231da22186fd433b2b5e021969124d9f21b33fbb0969e13d707c0e32bbReport Result6358152023-04-26 14:27:5339 days 9 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000536957172
0x0db023aeb0decc474ba5f08aa351218a32336ec758855f08eacc53045f34c2c6Report Result6355862023-04-26 12:40:0339 days 11 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.001068940589
0x6b15859b687849422d83b8b4c4269f95bd00212b5607721b300797ede6c2eeecReport Result6355812023-04-26 12:28:4739 days 11 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000337075431
0xbfc0517659e2dcfd70ec87169e9eb55762d7113d08260b88c6dd1991181be6ceReport Result6355302023-04-26 12:16:2539 days 11 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.001114353098
0x8d55d72f89654865a96d3f5b9809ba0f9326875b2557cce5bcec66c9e0ac0409Report Result6355272023-04-26 12:05:2539 days 11 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000346027781
0x1c0f9eb43979dbd4de7ab09d80cd2c1498055fb532997de121705d942e34c399Report Result6355242023-04-26 12:05:2539 days 11 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000385340274
0xdc35568c3c28a7f68c18c2c4ceff9c86cc5b76b3dea0ee5941c8fcf773ec9ca3Report Result6355182023-04-26 12:05:2539 days 11 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.000424263534
0x8819e62f105ffd779d6bd05b9329aef327503fd2562317fdd39016e50449de59Report Result6353982023-04-26 11:05:4139 days 12 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.002887769784
0x7b08408818716ca3a823faf330218a03e0cc940788d3024288ef5868fba69e94Report Result6352212023-04-26 9:52:3939 days 14 hrs ago0x8c49cafc4542d9ea9107d4e48412aced2a68aa77 IN 0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH0.003924106521
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb2a6a9c0c65cbf9ae1a4ba2073db3620049f0b5956776bd6b08c24057e455afb6478942023-04-28 3:55:3537 days 19 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x25c0ad415e6bf087885d78831b95e71e304f62de8f4329b5c7f466fdf59653776478702023-04-28 3:51:3437 days 20 hrs ago 0x2163dbcbdbbec066ef8d8adab75af8b0b9a5cfaa0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0.00014763 ETH
0x25c0ad415e6bf087885d78831b95e71e304f62de8f4329b5c7f466fdf59653776478702023-04-28 3:51:3437 days 20 hrs ago 0x2163dbcbdbbec066ef8d8adab75af8b0b9a5cfaa0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x25c0ad415e6bf087885d78831b95e71e304f62de8f4329b5c7f466fdf59653776478702023-04-28 3:51:3437 days 20 hrs ago 0x2163dbcbdbbec066ef8d8adab75af8b0b9a5cfaa0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x25c0ad415e6bf087885d78831b95e71e304f62de8f4329b5c7f466fdf59653776478702023-04-28 3:51:3437 days 20 hrs ago 0x2163dbcbdbbec066ef8d8adab75af8b0b9a5cfaa0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x9808eaed914b84edfa316ff8e9f34d8cd21e2c9ac717ca262b114c771f7297b96470272023-04-28 0:23:1137 days 23 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xa0a426dbc01790e824b4f0884379ef38ef72067e0d5a39be4e9d97b544cdc08c6469982023-04-28 0:18:5137 days 23 hrs ago 0x4c9ea5fa4f8470956f0be92aeb6a52abd85a643e0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0.00014763 ETH
0xa0a426dbc01790e824b4f0884379ef38ef72067e0d5a39be4e9d97b544cdc08c6469982023-04-28 0:18:5137 days 23 hrs ago 0x4c9ea5fa4f8470956f0be92aeb6a52abd85a643e0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xa0a426dbc01790e824b4f0884379ef38ef72067e0d5a39be4e9d97b544cdc08c6469982023-04-28 0:18:5137 days 23 hrs ago 0x4c9ea5fa4f8470956f0be92aeb6a52abd85a643e0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xa0a426dbc01790e824b4f0884379ef38ef72067e0d5a39be4e9d97b544cdc08c6469982023-04-28 0:18:5137 days 23 hrs ago 0x4c9ea5fa4f8470956f0be92aeb6a52abd85a643e0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x6082e8a45d8ea10c3bc2a3ae0fe2b348900ac2e4e7e0b0f3b44ffc96de3387716431672023-04-27 10:22:4038 days 13 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xf23ceab4d64a573e02a683dd08b8e35d92f21b52d7143faf28754763ebe902256431632023-04-27 10:15:5238 days 13 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xa37849404a80bb176f00cad1b9c5030b55ca81175391de6648acd5f13d98ed1c6431612023-04-27 10:15:5238 days 13 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x7362f10c7bded0bf83ca0232d5de6089949190be1a55b4da2834a86562dee8d16431582023-04-27 10:15:5238 days 13 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x719ecc9c6f7ee399c2504e7bad7d6f7cdb3694d821886a2596264f14aa77a7056431282023-04-27 10:10:3838 days 13 hrs ago 0xe490b89afade571d8afa158446c603d530608cea0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0.005152287 ETH
0x719ecc9c6f7ee399c2504e7bad7d6f7cdb3694d821886a2596264f14aa77a7056431282023-04-27 10:10:3838 days 13 hrs ago 0xe490b89afade571d8afa158446c603d530608cea0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x719ecc9c6f7ee399c2504e7bad7d6f7cdb3694d821886a2596264f14aa77a7056431282023-04-27 10:10:3838 days 13 hrs ago 0xe490b89afade571d8afa158446c603d530608cea0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x719ecc9c6f7ee399c2504e7bad7d6f7cdb3694d821886a2596264f14aa77a7056431282023-04-27 10:10:3838 days 13 hrs ago 0xe490b89afade571d8afa158446c603d530608cea0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xbd27a5c4f7deddb87bbaf8832ff1e8bb87af7e6f08160cc293ceb8490f64d7016431272023-04-27 10:10:3838 days 13 hrs ago 0x35a320906c426ee9c23ffddd09111b1a3ce1539f0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0.005152287 ETH
0xbd27a5c4f7deddb87bbaf8832ff1e8bb87af7e6f08160cc293ceb8490f64d7016431272023-04-27 10:10:3838 days 13 hrs ago 0x35a320906c426ee9c23ffddd09111b1a3ce1539f0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xbd27a5c4f7deddb87bbaf8832ff1e8bb87af7e6f08160cc293ceb8490f64d7016431272023-04-27 10:10:3838 days 13 hrs ago 0x35a320906c426ee9c23ffddd09111b1a3ce1539f0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0xbd27a5c4f7deddb87bbaf8832ff1e8bb87af7e6f08160cc293ceb8490f64d7016431272023-04-27 10:10:3838 days 13 hrs ago 0x35a320906c426ee9c23ffddd09111b1a3ce1539f0x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x0cfa02122ace05f2a180843376a68ba3be65d438c1aabbed0a0a99842c68036d6429532023-04-27 9:19:3938 days 14 hrs ago 0x8c49cafc4542d9ea9107d4e48412aced2a68aa770x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
0x5ef8d3602040a44ecf77431f2b7e3de25558bddb002ffa47083f411747a2517d6429412023-04-27 9:13:0838 days 14 hrs ago 0x1f35f6d6be5bd574b2b00ac2dc0becafcc04ed510x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0.002642577 ETH
0x5ef8d3602040a44ecf77431f2b7e3de25558bddb002ffa47083f411747a2517d6429412023-04-27 9:13:0838 days 14 hrs ago 0x1f35f6d6be5bd574b2b00ac2dc0becafcc04ed510x0000007d51da8bf5ca07fdd1e0970fa3fd8b92bd0 ETH
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

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

Contract Name:
WitnetProxy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at testnet-zkevm.polygonscan.com on 2023-04-27
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.9.0;
pragma experimental ABIEncoderV2;

/**
 * @dev Collection of functions related to the address type
 */
library AddressUpgradeable {
    /**
     * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
 * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
 * case an upgrade adds a module that needs to be initialized.
 *
 * For example:
 *
 * [.hljs-theme-light.nopadding]
 * ```
 * contract MyToken is ERC20Upgradeable {
 *     function initialize() initializer public {
 *         __ERC20_init("MyToken", "MTK");
 *     }
 * }
 * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
 *     function initializeV2() reinitializer(2) public {
 *         __ERC20Permit_init("MyToken");
 *     }
 * }
 * ```
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 *
 * [CAUTION]
 * ====
 * Avoid leaving a contract uninitialized.
 *
 * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
 * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
 * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
 *
 * [.hljs-theme-light.nopadding]
 * ```
 * /// @custom:oz-upgrades-unsafe-allow constructor
 * constructor() {
 *     _disableInitializers();
 * }
 * ```
 * ====
 */
abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     * @custom:oz-retyped-from bool
     */
    uint8 private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Triggered when the contract has been initialized or reinitialized.
     */
    event Initialized(uint8 version);

    /**
     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
     * `onlyInitializing` functions can be used to initialize parent contracts.
     *
     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a
     * constructor.
     *
     * Emits an {Initialized} event.
     */
    modifier initializer() {
        bool isTopLevelCall = !_initializing;
        require(
            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),
            "Initializable: contract is already initialized"
        );
        _initialized = 1;
        if (isTopLevelCall) {
            _initializing = true;
        }
        _;
        if (isTopLevelCall) {
            _initializing = false;
            emit Initialized(1);
        }
    }

    /**
     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
     * used to initialize parent contracts.
     *
     * A reinitializer may be used after the original initialization step. This is essential to configure modules that
     * are added through upgrades and that require initialization.
     *
     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
     * cannot be nested. If one is invoked in the context of another, execution will revert.
     *
     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
     * a contract, executing them in the right order is up to the developer or operator.
     *
     * WARNING: setting the version to 255 will prevent any future reinitialization.
     *
     * Emits an {Initialized} event.
     */
    modifier reinitializer(uint8 version) {
        require(!_initializing && _initialized < version, "Initializable: contract is already initialized");
        _initialized = version;
        _initializing = true;
        _;
        _initializing = false;
        emit Initialized(version);
    }

    /**
     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
     * {initializer} and {reinitializer} modifiers, directly or indirectly.
     */
    modifier onlyInitializing() {
        require(_initializing, "Initializable: contract is not initializing");
        _;
    }

    /**
     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called
     * through proxies.
     *
     * Emits an {Initialized} event the first time it is successfully executed.
     */
    function _disableInitializers() internal virtual {
        require(!_initializing, "Initializable: contract is initializing");
        if (_initialized < type(uint8).max) {
            _initialized = type(uint8).max;
            emit Initialized(type(uint8).max);
        }
    }

    /**
     * @dev Internal function that returns the initialized version. Returns `_initialized`
     */
    function _getInitializedVersion() internal view returns (uint8) {
        return _initialized;
    }

    /**
     * @dev Internal function that returns the initialized version. Returns `_initializing`
     */
    function _isInitializing() internal view returns (bool) {
        return _initializing;
    }
}

abstract contract Proxiable {
    /// @dev Complying with EIP-1822: Universal Upgradeable Proxy Standard (UUPS)
    /// @dev See https://eips.ethereum.org/EIPS/eip-1822.
    function proxiableUUID() virtual external view returns (bytes32);

    struct ProxiableSlot {
        address implementation;
        address proxy;
    }

    function __implementation() internal view returns (address) {
        return __proxiable().implementation;
    }

    function __proxy() internal view returns (address) {
        return __proxiable().proxy;
    }

    function __proxiable() internal pure returns (ProxiableSlot storage proxiable) {
        assembly {
            // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
            proxiable.slot := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
        }
    }
}

abstract contract Upgradeable is Initializable, Proxiable {

    address internal immutable _BASE;
    bytes32 internal immutable _CODEHASH;
    bool internal immutable _UPGRADABLE;

    modifier onlyDelegateCalls virtual {
        require(
            address(this) != _BASE,
            "Upgradeable: not a delegate call"
        );
        _;
    }

    /// Emitted every time the contract gets upgraded.
    /// @param from The address who ordered the upgrading. Namely, the WRB operator in "trustable" implementations.
    /// @param baseAddr The address of the new implementation contract.
    /// @param baseCodehash The EVM-codehash of the new implementation contract.
    /// @param versionTag Ascii-encoded version literal with which the implementation deployer decided to tag it.
    event Upgraded(
        address indexed from,
        address indexed baseAddr,
        bytes32 indexed baseCodehash,
        string  versionTag
    );

    constructor (bool _isUpgradable) {
        address _base = address(this);
        bytes32 _codehash;        
        assembly {
            _codehash := extcodehash(_base)
        }
        _BASE = _base;
        _CODEHASH = _codehash;
        _UPGRADABLE = _isUpgradable;
    }

    /// @dev Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern.
    function base() public view returns (address) {
        return _BASE;
    }

    /// @dev Retrieves the immutable codehash of this contract, even if invoked as delegatecall.
    function codehash() public view returns (bytes32) {
        return _CODEHASH;
    }

    /// @dev Determines whether the logic of this contract is potentially upgradable.
    function isUpgradable() public view returns (bool) {
        return _UPGRADABLE;
    }

    /// @dev Tells whether provided address could eventually upgrade the contract.
    function isUpgradableFrom(address from) virtual external view returns (bool);

    /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy.    
    /// @dev Must fail when trying to upgrade to same logic contract more than once.
    function initialize(bytes memory) virtual external;

    /// @dev Retrieves human-redable named version of current implementation.
    function version() virtual public view returns (string memory); 
}

/// @title WitnetProxy: upgradable delegate-proxy contract. 
/// @author The Witnet Foundation.
contract WitnetProxy {

    /// Event emitted every time the implementation gets updated.
    event Upgraded(address indexed implementation);  

    /// Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).
    constructor () {}

    receive() virtual external payable {}

    /// Payable fallback accepts delegating calls to payable functions.  
    fallback() external payable { /* solhint-disable no-complex-fallback */
        address _implementation = implementation();
        assembly { /* solhint-disable avoid-low-level-calls */
            // Gas optimized delegate call to 'implementation' contract.
            // Note: `msg.data`, `msg.sender` and `msg.value` will be passed over 
            //       to actual implementation of `msg.sig` within `implementation` contract.
            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize())
            let result := delegatecall(gas(), _implementation, ptr, calldatasize(), 0, 0)
            let size := returndatasize()
            returndatacopy(ptr, 0, size)
            switch result
                case 0  { 
                    // pass back revert message:
                    revert(ptr, size) 
                }
                default {
                  // pass back same data as returned by 'implementation' contract:
                  return(ptr, size) 
                }
        }
    }

    /// Returns proxy's current implementation address.
    function implementation() public view returns (address) {
        return __proxySlot().implementation;
    }

    /// Upgrades the `implementation` address.
    /// @param _newImplementation New implementation address.
    /// @param _initData Raw data with which new implementation will be initialized.
    /// @return Returns whether new implementation would be further upgradable, or not.
    function upgradeTo(address _newImplementation, bytes memory _initData)
        public returns (bool)
    {
        // New implementation cannot be null:
        require(_newImplementation != address(0), "WitnetProxy: null implementation");

        address _oldImplementation = implementation();
        if (_oldImplementation != address(0)) {
            // New implementation address must differ from current one:
            require(_newImplementation != _oldImplementation, "WitnetProxy: nothing to upgrade");

            // Assert whether current implementation is intrinsically upgradable:
            try Upgradeable(_oldImplementation).isUpgradable() returns (bool _isUpgradable) {
                require(_isUpgradable, "WitnetProxy: not upgradable");
            } catch {
                revert("WitnetProxy: unable to check upgradability");
            }

            // Assert whether current implementation allows `msg.sender` to upgrade the proxy:
            (bool _wasCalled, bytes memory _result) = _oldImplementation.delegatecall(
                abi.encodeWithSignature(
                    "isUpgradableFrom(address)",
                    msg.sender
                )
            );
            require(_wasCalled, "WitnetProxy: not compliant");
            require(abi.decode(_result, (bool)), "WitnetProxy: not authorized");
            require(
                Upgradeable(_oldImplementation).proxiableUUID() == Upgradeable(_newImplementation).proxiableUUID(),
                "WitnetProxy: proxiableUUIDs mismatch"
            );
        }

        // Initialize new implementation within proxy-context storage:
        (bool _wasInitialized,) = _newImplementation.delegatecall(
            abi.encodeWithSignature(
                "initialize(bytes)",
                _initData
            )
        );
        require(_wasInitialized, "WitnetProxy: unable to initialize");

        // If all checks and initialization pass, update implementation address:
        __proxySlot().implementation = _newImplementation;
        emit Upgraded(_newImplementation);

        // Asserts new implementation complies w/ minimal implementation of Upgradeable interface:
        try Upgradeable(_newImplementation).isUpgradable() returns (bool _isUpgradable) {
            return _isUpgradable;
        }
        catch {
            revert ("WitnetProxy: not compliant");
        }
    }

    /// @dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address.
    function __proxySlot() private pure returns (Proxiable.ProxiableSlot storage _slot) {
        assembly {
            // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
            _slot.slot := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
        }
    }

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newImplementation","type":"address"},{"internalType":"bytes","name":"_initData","type":"bytes"}],"name":"upgradeTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50610912806100206000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610757565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561053857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610827565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b179052516103269190610874565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103b85760405162461bcd60e51b815260206004820152601a60248201527f5769746e657450726f78793a206e6f7420636f6d706c69616e740000000000006044820152606401610149565b808060200190518101906103cc9190610827565b6104185760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610890565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dc9190610890565b146105355760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b6000846001600160a01b03168460405160240161055591906108a9565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161058a9190610874565b600060405180830381855af49150503d80600081146105c5576040519150601f19603f3d011682016040523d82523d6000602084013e6105ca565b606091505b50509050806106255760405162461bcd60e51b815260206004820152602160248201527f5769746e657450726f78793a20756e61626c6520746f20696e697469616c697a6044820152606560f81b6064820152608401610149565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0387169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2846001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106e5575060408051601f3d908101601f191682019092526106e291810190610827565b60015b6107315760405162461bcd60e51b815260206004820152601a60248201527f5769746e657450726f78793a206e6f7420636f6d706c69616e740000000000006044820152606401610149565b925061073b915050565b92915050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561076a57600080fd5b82356001600160a01b038116811461078157600080fd5b9150602083013567ffffffffffffffff8082111561079e57600080fd5b818501915085601f8301126107b257600080fd5b8135818111156107c4576107c4610741565b604051601f8201601f19908116603f011681019083821181831017156107ec576107ec610741565b8160405282815288602084870101111561080557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561083957600080fd5b8151801515811461084957600080fd5b9392505050565b60005b8381101561086b578181015183820152602001610853565b50506000910152565b60008251610886818460208701610850565b9190910192915050565b6000602082840312156108a257600080fd5b5051919050565b60208152600082518060208401526108c8816040850160208701610850565b601f01601f1916919091016040019291505056fea26469706673582212200771bc4bad015c089efb2351eb3266c8aad36c8daccf86bbf3421605ef5fc23c64736f6c63430008110033

Deployed ByteCode Sourcemap

18451:4800:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18933:23;18959:16;:14;:16::i;:::-;18933:42;;19323:4;19317:11;19363:14;19360:1;19355:3;19342:36;19467:1;19464;19448:14;19443:3;19426:15;19419:5;19406:63;19495:16;19548:4;19545:1;19540:3;19525:28;19574:6;19598:119;;;;19860:4;19855:3;19848:17;19598:119;19692:4;19687:3;19680:17;19968:110;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;19968:110:0;;;;;;;;20372:2454;;;;;;;;;;-1:-1:-1;20372:2454:0;;;;;:::i;:::-;;:::i;:::-;;;1619:14:1;;1612:22;1594:41;;1582:2;1567:18;20372:2454:0;1454:187:1;19968:110:0;23162:66;20042:28;-1:-1:-1;;;;;20042:28:0;;19968:110::o;20372:2454::-;20468:4;-1:-1:-1;;;;;20545:32:0;;20537:77;;;;-1:-1:-1;;;20537:77:0;;1848:2:1;20537:77:0;;;1830:21:1;;;1867:18;;;1860:30;1926:34;1906:18;;;1899:62;1978:18;;20537:77:0;;;;;;;;;20627:26;20656:16;:14;:16::i;:::-;20627:45;-1:-1:-1;;;;;;20687:32:0;;;20683:1285;;20839:18;-1:-1:-1;;;;;20817:40:0;:18;-1:-1:-1;;;;;20817:40:0;;20809:84;;;;-1:-1:-1;;;20809:84:0;;2209:2:1;20809:84:0;;;2191:21:1;2248:2;2228:18;;;2221:30;2287:33;2267:18;;;2260:61;2338:18;;20809:84:0;2007:355:1;20809:84:0;21009:18;-1:-1:-1;;;;;20997:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20997:46:0;;;;;;;;-1:-1:-1;;20997:46:0;;;;;;;;;;;;:::i;:::-;;;20993:262;;21187:52;;-1:-1:-1;;;21187:52:0;;2851:2:1;21187:52:0;;;2833:21:1;2890:2;2870:18;;;2863:30;2929:34;2909:18;;;2902:62;-1:-1:-1;;;2980:18:1;;;2973:40;3030:19;;21187:52:0;2649:406:1;20993:262:0;21100:13;21092:53;;;;-1:-1:-1;;;21092:53:0;;3262:2:1;21092:53:0;;;3244:21:1;3301:2;3281:18;;;3274:30;3340:29;3320:18;;;3313:57;3387:18;;21092:53:0;3060:351:1;21092:53:0;-1:-1:-1;21459:125:0;;21555:10;21459:125;;;160:51:1;21368:15:0;;;;-1:-1:-1;;;;;21409:31:0;;;133:18:1;;21459:125:0;;;-1:-1:-1;;21459:125:0;;;;;;;;;;;;;;-1:-1:-1;;;;;21459:125:0;-1:-1:-1;;;21459:125:0;;;21409:190;;;21459:125;21409:190;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21367:232;;;;21622:10;21614:49;;;;-1:-1:-1;;;21614:49:0;;4165:2:1;21614:49:0;;;4147:21:1;4204:2;4184:18;;;4177:30;4243:28;4223:18;;;4216:56;4289:18;;21614:49:0;3963:350:1;21614:49:0;21697:7;21686:27;;;;;;;;;;;;:::i;:::-;21678:67;;;;-1:-1:-1;;;21678:67:0;;4520:2:1;21678:67:0;;;4502:21:1;4559:2;4539:18;;;4532:30;4598:29;4578:18;;;4571:57;4645:18;;21678:67:0;4318:351:1;21678:67:0;21849:18;-1:-1:-1;;;;;21837:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21798:18;-1:-1:-1;;;;;21786:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:98;21760:196;;;;-1:-1:-1;;;21760:196:0;;5065:2:1;21760:196:0;;;5047:21:1;5104:2;5084:18;;;5077:30;5143:34;5123:18;;;5116:62;-1:-1:-1;;;5194:18:1;;;5187:34;5238:19;;21760:196:0;4863:400:1;21760:196:0;20721:1247;;20683:1285;22053:20;22078:18;-1:-1:-1;;;;;22078:31:0;22204:9;22124:104;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22124:104:0;;;;;;;;;;;;;;-1:-1:-1;;;;;22124:104:0;-1:-1:-1;;;22124:104:0;;;22078:161;;;22124:104;22078:161;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22052:187;;;22258:15;22250:61;;;;-1:-1:-1;;;22250:61:0;;5869:2:1;22250:61:0;;;5851:21:1;5908:2;5888:18;;;5881:30;5947:34;5927:18;;;5920:62;-1:-1:-1;;;5998:18:1;;;5991:31;6039:19;;22250:61:0;5667:397:1;22250:61:0;23162:66;22406:49;;-1:-1:-1;;;;;;22406:49:0;-1:-1:-1;;;;;22406:49:0;;;;;;;;22471:28;;;;-1:-1:-1;;22471:28:0;22628:18;-1:-1:-1;;;;;22616:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22616:46:0;;;;;;;;-1:-1:-1;;22616:46:0;;;;;;;;;;;;:::i;:::-;;;22612:207;;22770:37;;-1:-1:-1;;;22770:37:0;;4165:2:1;22770:37:0;;;4147:21:1;4204:2;4184:18;;;4177:30;4243:28;4223:18;;;4216:56;4289:18;;22770:37:0;3963:350:1;22612:207:0;22714:13;-1:-1:-1;22707:20:0;;-1:-1:-1;;22707:20:0;20372:2454;;;;;:::o;222:127:1:-;283:10;278:3;274:20;271:1;264:31;314:4;311:1;304:15;338:4;335:1;328:15;354:1095;431:6;439;492:2;480:9;471:7;467:23;463:32;460:52;;;508:1;505;498:12;460:52;534:23;;-1:-1:-1;;;;;586:31:1;;576:42;;566:70;;632:1;629;622:12;566:70;655:5;-1:-1:-1;711:2:1;696:18;;683:32;734:18;764:14;;;761:34;;;791:1;788;781:12;761:34;829:6;818:9;814:22;804:32;;874:7;867:4;863:2;859:13;855:27;845:55;;896:1;893;886:12;845:55;932:2;919:16;954:2;950;947:10;944:36;;;960:18;;:::i;:::-;1035:2;1029:9;1003:2;1089:13;;-1:-1:-1;;1085:22:1;;;1109:2;1081:31;1077:40;1065:53;;;1133:18;;;1153:22;;;1130:46;1127:72;;;1179:18;;:::i;:::-;1219:10;1215:2;1208:22;1254:2;1246:6;1239:18;1294:7;1289:2;1284;1280;1276:11;1272:20;1269:33;1266:53;;;1315:1;1312;1305:12;1266:53;1371:2;1366;1362;1358:11;1353:2;1345:6;1341:15;1328:46;1416:1;1411:2;1406;1398:6;1394:15;1390:24;1383:35;1437:6;1427:16;;;;;;;354:1095;;;;;:::o;2367:277::-;2434:6;2487:2;2475:9;2466:7;2462:23;2458:32;2455:52;;;2503:1;2500;2493:12;2455:52;2535:9;2529:16;2588:5;2581:13;2574:21;2567:5;2564:32;2554:60;;2610:1;2607;2600:12;2554:60;2633:5;2367:277;-1:-1:-1;;;2367:277:1:o;3416:250::-;3501:1;3511:113;3525:6;3522:1;3519:13;3511:113;;;3601:11;;;3595:18;3582:11;;;3575:39;3547:2;3540:10;3511:113;;;-1:-1:-1;;3658:1:1;3640:16;;3633:27;3416:250::o;3671:287::-;3800:3;3838:6;3832:13;3854:66;3913:6;3908:3;3901:4;3893:6;3889:17;3854:66;:::i;:::-;3936:16;;;;;3671:287;-1:-1:-1;;3671:287:1:o;4674:184::-;4744:6;4797:2;4785:9;4776:7;4772:23;4768:32;4765:52;;;4813:1;4810;4803:12;4765:52;-1:-1:-1;4836:16:1;;4674:184;-1:-1:-1;4674:184:1:o;5268:394::-;5415:2;5404:9;5397:21;5378:4;5447:6;5441:13;5490:6;5485:2;5474:9;5470:18;5463:34;5506:79;5578:6;5573:2;5562:9;5558:18;5553:2;5545:6;5541:15;5506:79;:::i;:::-;5646:2;5625:15;-1:-1:-1;;5621:29:1;5606:45;;;;5653:2;5602:54;;5268:394;-1:-1:-1;;5268:394:1:o

Swarm Source

ipfs://0771bc4bad015c089efb2351eb3266c8aad36c8daccf86bbf3421605ef5fc23c
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading