ETH Price: $3,100.59 (+0.56%)
Gas: 4 Gwei

Contract

0x8eAe4006183B421ea22ba01B5697B6852d6C4916
 

Overview

ETH Balance

0.029042508959240803 ETH

Eth Value

$90.05 (@ $3,100.59/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Clear Deal Selle...202460002024-07-06 7:32:474 days ago1720251167IN
0x8eAe4006...52d6C4916
0 ETH0.000145012.84658054
Start Deal202456322024-07-06 6:18:474 days ago1720246727IN
0x8eAe4006...52d6C4916
2.307077 ETH0.00016083.05325354
Clear Deal Selle...202127082024-07-01 15:57:238 days ago1719849443IN
0x8eAe4006...52d6C4916
0 ETH0.00046759.17495641
Start Deal202126102024-07-01 15:37:478 days ago1719848267IN
0x8eAe4006...52d6C4916
0.96824 ETH0.0008817316.73813552
Clear Deal Selle...201776302024-06-26 18:23:4713 days ago1719426227IN
0x8eAe4006...52d6C4916
0 ETH0.000353036.93010199
Start Deal201775602024-06-26 18:09:4713 days ago1719425387IN
0x8eAe4006...52d6C4916
1.680849 ETH0.000491669.33547339
Clear Deal Selle...201409742024-06-21 15:24:3518 days ago1718983475IN
0x8eAe4006...52d6C4916
0 ETH0.000410188.05012505
Start Deal201407262024-06-21 14:34:3518 days ago1718980475IN
0x8eAe4006...52d6C4916
0.776929 ETH0.0006254611.87330801
Clear Deal Selle...201406372024-06-21 14:16:4718 days ago1718979407IN
0x8eAe4006...52d6C4916
0 ETH0.000728329.5905776
Start Deal201405912024-06-21 14:07:3518 days ago1718978855IN
0x8eAe4006...52d6C4916
0.152121 ETH0.000447868.50395637
Clear Deal Selle...200838352024-06-13 15:36:2326 days ago1718292983IN
0x8eAe4006...52d6C4916
0 ETH0.000983519.30187896
Start Deal200837732024-06-13 15:23:4726 days ago1718292227IN
0x8eAe4006...52d6C4916
0.99532 ETH0.0009206117.4762435
Clear Deal Selle...200631402024-06-10 18:12:2329 days ago1718043143IN
0x8eAe4006...52d6C4916
0 ETH0.0015468830.35853934
Start Deal200630502024-06-10 17:54:1129 days ago1718042051IN
0x8eAe4006...52d6C4916
1.252202 ETH0.0008128115.42980321
Clear Deal Selle...200547852024-06-09 14:12:2330 days ago1717942343IN
0x8eAe4006...52d6C4916
0 ETH0.0005921911.62208267
Start Deal200547512024-06-09 14:05:3530 days ago1717941935IN
0x8eAe4006...52d6C4916
0.926134 ETH0.0005459110.36324965
Clear Deal Selle...200137312024-06-03 20:38:5936 days ago1717447139IN
0x8eAe4006...52d6C4916
0 ETH0.0006433312.62586635
Start Deal200136032024-06-03 20:12:5936 days ago1717445579IN
0x8eAe4006...52d6C4916
0.891633 ETH0.0006917913.1325447
Clear Deal Selle...198096672024-05-06 7:51:3565 days ago1714981895IN
0x8eAe4006...52d6C4916
0 ETH0.00030976.07951104
Start Deal198096082024-05-06 7:39:4765 days ago1714981187IN
0x8eAe4006...52d6C4916
1.167695 ETH0.000318956.05610281
Clear Deal Selle...196972102024-04-20 14:26:2380 days ago1713623183IN
0x8eAe4006...52d6C4916
0 ETH0.0005280410.36553516
Start Deal196971092024-04-20 14:06:1180 days ago1713621971IN
0x8eAe4006...52d6C4916
0.973081 ETH0.0005505910.4544776
Clear Deal Selle...196970552024-04-20 13:55:2380 days ago1713621323IN
0x8eAe4006...52d6C4916
0 ETH0.000448888.80964374
Start Deal196970112024-04-20 13:46:3580 days ago1713620795IN
0x8eAe4006...52d6C4916
0.973135 ETH0.00050759.63402543
Clear Deal Selle...196969822024-04-20 13:40:4780 days ago1713620447IN
0x8eAe4006...52d6C4916
0 ETH0.000492079.65727154
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
202460002024-07-06 7:32:474 days ago1720251167
0x8eAe4006...52d6C4916
2.30476992 ETH
202127082024-07-01 15:57:238 days ago1719849443
0x8eAe4006...52d6C4916
0.96727176 ETH
201776302024-06-26 18:23:4713 days ago1719426227
0x8eAe4006...52d6C4916
1.67916815 ETH
201409742024-06-21 15:24:3518 days ago1718983475
0x8eAe4006...52d6C4916
0.77615207 ETH
201406372024-06-21 14:16:4718 days ago1718979407
0x8eAe4006...52d6C4916
0.15196887 ETH
200838352024-06-13 15:36:2326 days ago1718292983
0x8eAe4006...52d6C4916
0.99432468 ETH
200631402024-06-10 18:12:2329 days ago1718043143
0x8eAe4006...52d6C4916
1.25094979 ETH
200547852024-06-09 14:12:2330 days ago1717942343
0x8eAe4006...52d6C4916
0.92520786 ETH
200137312024-06-03 20:38:5936 days ago1717447139
0x8eAe4006...52d6C4916
0.89074136 ETH
198096672024-05-06 7:51:3565 days ago1714981895
0x8eAe4006...52d6C4916
1.1665273 ETH
196972102024-04-20 14:26:2380 days ago1713623183
0x8eAe4006...52d6C4916
0.97210791 ETH
196970552024-04-20 13:55:2380 days ago1713621323
0x8eAe4006...52d6C4916
0.97216186 ETH
196969822024-04-20 13:40:4780 days ago1713620447
0x8eAe4006...52d6C4916
0.8679272 ETH
196955732024-04-20 8:55:5981 days ago1713603359
0x8eAe4006...52d6C4916
1.01040658 ETH
196257742024-04-10 14:18:2390 days ago1712758703
0x8eAe4006...52d6C4916
0.000084 ETH
196238452024-04-10 7:49:1191 days ago1712735351
0x8eAe4006...52d6C4916
0.000298 ETH
196169092024-04-09 8:30:3592 days ago1712651435
0x8eAe4006...52d6C4916
0.99118782 ETH
195897692024-04-05 13:14:4795 days ago1712322887
0x8eAe4006...52d6C4916
0.999 ETH
194838162024-03-21 15:05:35110 days ago1711033535
0x8eAe4006...52d6C4916
0.98534966 ETH
194403712024-03-15 12:32:59116 days ago1710505979
0x8eAe4006...52d6C4916
0.9978971 ETH
194333882024-03-14 12:56:47117 days ago1710421007
0x8eAe4006...52d6C4916
0.98901 ETH
193850212024-03-07 18:16:11124 days ago1709835371
0x8eAe4006...52d6C4916
0.999 ETH
192628062024-02-19 15:56:11141 days ago1708358171
0x8eAe4006...52d6C4916
0.69584945 ETH
192627562024-02-19 15:45:59141 days ago1708357559
0x8eAe4006...52d6C4916
1.20046533 ETH
192627242024-02-19 15:39:35141 days ago1708357175
0x8eAe4006...52d6C4916
0.71240088 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DP2PCoin

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-22
*/

// SPDX-License-Identifier: MIXED

// Sources flattened with hardhat v2.14.1 https://hardhat.org

// File contracts/Address.sol

// License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [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 functionCall(target, data, "Address: low-level call failed");
    }

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


// File contracts/Strings.sol

// License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


// File contracts/ECDSA.sol

// License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}


// File contracts/IDP2PStateMachine.sol

// License-Identifier: UNLICENSED

pragma solidity ^0.8.0;

interface IDP2PStateMachine {
	enum DealState {
		ZERO, // 0
		START, // 1
		PAYMENT_COMPLETE, // 2 legacy
		DISPUTE, // 3 legacy
		CANCELED_ARBITER, // 4
		CANCELED_TIMEOUT_ARBITER, // 5
		CANCELED_BUYER, // 6
		CANCELED_SELLER, // 7 impossible state
		CLEARED_SELLER, // 8
		CLEARED_ARBITER // 9
	}

	struct DealData {
		address token;
		address seller;
		address buyer;
		address arbiter;
		address feeReceiver;
		uint256 amount;
		uint256 fee;
		uint256 nonce;
		bytes32 extra;
	}

	event StateChanged(bytes32 indexed dealHash, DealData deal, DealState state, address creator);

	function startDeal(DealData calldata deal) external payable returns (bytes32);

	function cancelDealBuyer(DealData calldata deal) external;

	function clearDealSeller(DealData calldata deal) external;

	function cancelTimeoutArbiter(DealData calldata deal) external;

	function cancelDealArbiter(DealData calldata deal) external;

	function clearDealArbiter(DealData calldata deal) external;

	function claim(address token, address receiver) external;
}


// File contracts/DP2PStateMachine.sol

// License-Identifier: UNLICENCED

pragma solidity ^0.8.0;


abstract contract DP2PStateMachine is IDP2PStateMachine {
	mapping(bytes32 => DealState) public deals;
	mapping(address => mapping(address => uint256)) public fees; // token -> addr -> fees

	modifier isValidStateTransfer(DealData calldata deal, DealState toState) {
		bytes32 _hash = dealHash(deal);
		require(deals[_hash] == DealState.START, 'Wrong deal state or deal is missing');
		deals[_hash] = toState;
		_;
		emit StateChanged(_hash, deal, toState, msg.sender);
	}

	modifier onlyArbiter(DealData calldata deal) {
		require(deal.arbiter == msg.sender, 'arbiter != msgSender()');
		_;
	}

	modifier onlyBuyer(DealData calldata deal) {
		require(deal.buyer == msg.sender, 'buyer != msgSender()');
		_;
	}

	modifier onlySeller(DealData calldata deal) {
		require(deal.seller == msg.sender, 'seller != msgSender()');
		_;
	}

	function startDeal(
		DealData calldata deal
	) external payable virtual override onlySeller(deal) returns (bytes32) {
		bytes32 _hash = dealHash(deal);
		require(deals[_hash] == DealState.ZERO, 'storage slot collision');
		deals[_hash] = DealState.START;

		_transferFrom(deal.token, deal.seller, address(this), deal.amount + deal.fee);

		emit StateChanged(_hash, deal, DealState.START, msg.sender);
		return _hash;
	}

	function cancelDealBuyer(
		DealData calldata deal
	) external override onlyBuyer(deal) isValidStateTransfer(deal, DealState.CANCELED_BUYER) {
		_cancelDeal(deal);
	}

	function clearDealSeller(
		DealData calldata deal
	) external override onlySeller(deal) isValidStateTransfer(deal, DealState.CLEARED_SELLER) {
		_clearDeal(deal);
	}

	function cancelTimeoutArbiter(
		DealData calldata deal
	)
		external
		override
		onlyArbiter(deal)
		isValidStateTransfer(deal, DealState.CANCELED_TIMEOUT_ARBITER)
	{
		_cancelDeal(deal);
	}

	function cancelDealArbiter(
		DealData calldata deal
	) external override onlyArbiter(deal) isValidStateTransfer(deal, DealState.CANCELED_ARBITER) {
		_cancelDeal(deal);
	}

	function clearDealArbiter(
		DealData calldata deal
	) external override onlyArbiter(deal) isValidStateTransfer(deal, DealState.CLEARED_ARBITER) {
		_clearDeal(deal);
	}

	function claim(address token, address receiver) external override {
		uint256 amount = fees[token][msg.sender];
		require(amount > 0, 'has no accumulated fees');
		fees[token][msg.sender] = 0;
		_transfer(token, receiver, amount);
	}

	function dealHash(DealData calldata deal) internal pure returns (bytes32) {
		return keccak256(abi.encode(deal));
	}

	function _cancelDeal(DealData calldata deal) internal {
		_transfer(deal.token, deal.seller, deal.amount + deal.fee);
	}

	function _clearDeal(DealData calldata deal) internal {
		fees[deal.token][deal.feeReceiver] += deal.fee;
		_transfer(deal.token, deal.buyer, deal.amount);
	}

	function _transfer(address token, address _to, uint256 _value) internal virtual;

	function _transferFrom(
		address token,
		address _from,
		address _to,
		uint256 _value
	) internal virtual;
}


// File contracts/DP2PCoin.sol

// License-Identifier: UNLICENSED

pragma solidity ^0.8.0;


contract DP2PCoin is DP2PStateMachine {
	using Address for address;

	string public constant VERSION = '4.0-coin-dp2p';

	function startDeal(
		DealData calldata deal
	) external payable override onlySeller(deal) returns (bytes32) {
		bytes32 _hash = dealHash(deal);
		require(deals[_hash] == DealState.ZERO, 'storage slot collision');
		require(msg.value > 0 && msg.value == deal.amount + deal.fee, 'wrong ether amount');
		deals[_hash] = DealState.START;

		emit StateChanged(_hash, deal, DealState.START, msg.sender);
		return _hash;
	}

	function _transfer(address /* token */, address _to, uint256 _value) internal override {
		payable(_to).transfer(_value);
	}

	function _transferFrom(
		address token,
		address _from,
		address _to,
		uint256 _value
	) internal override {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"dealHash","type":"bytes32"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"indexed":false,"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"},{"indexed":false,"internalType":"enum IDP2PStateMachine.DealState","name":"state","type":"uint8"},{"indexed":false,"internalType":"address","name":"creator","type":"address"}],"name":"StateChanged","type":"event"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"}],"name":"cancelDealArbiter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"}],"name":"cancelDealBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"}],"name":"cancelTimeoutArbiter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"}],"name":"clearDealArbiter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"}],"name":"clearDealSeller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"deals","outputs":[{"internalType":"enum IDP2PStateMachine.DealState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"arbiter","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"extra","type":"bytes32"}],"internalType":"struct IDP2PStateMachine.DealData","name":"deal","type":"tuple"}],"name":"startDeal","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"}]

608060405234801561001057600080fd5b50610b95806100206000396000f3fe6080604052600436106100915760003560e01c806381cd872a1161005957806381cd872a1461013e5780639b9ac2cb1461017b578063a52dfedc146101b3578063c219dc00146101d3578063ffa1ad74146101f357600080fd5b806321c0b342146100965780633ad23e1e146100b8578063518839d3146100d85780635d20aece146100f85780637456e1f61461011e575b600080fd5b3480156100a257600080fd5b506100b66100b13660046108ca565b610239565b005b3480156100c457600080fd5b506100b66100d33660046108fd565b6102e3565b3480156100e457600080fd5b506100b66100f33660046108fd565b6103e9565b61010b6101063660046108fd565b61042f565b6040519081526020015b60405180910390f35b34801561012a57600080fd5b506100b66101393660046108fd565b6105c9565b34801561014a57600080fd5b5061016e610159366004610916565b60006020819052908152604090205460ff1681565b6040516101159190610967565b34801561018757600080fd5b5061010b6101963660046108ca565b600160209081526000928352604080842090915290825290205481565b3480156101bf57600080fd5b506100b66101ce3660046108fd565b6106b4565b3480156101df57600080fd5b506100b66101ee3660046108fd565b610721565b3480156101ff57600080fd5b5061022c6040518060400160405280600d81526020016c0342e302d636f696e2d6470327609c1b81525081565b604051610115919061097b565b6001600160a01b0382166000908152600160209081526040808320338452909152902054806102af5760405162461bcd60e51b815260206004820152601760248201527f686173206e6f20616363756d756c61746564206665657300000000000000000060448201526064015b60405180910390fd5b6001600160a01b03831660009081526001602090815260408083203384529091528120556102de838383610767565b505050565b80336102f560808301606084016109c9565b6001600160a01b03161461031b5760405162461bcd60e51b81526004016102a6906109eb565b8160056000610329836107a3565b9050600160008281526020819052604090205460ff1660098111156103505761035061092f565b1461036d5760405162461bcd60e51b81526004016102a690610a1b565b6000818152602081905260409020805483919060ff191660018360098111156103985761039861092f565b02179055506103a6856107d3565b807fdb9be0a24c3d454708d973db0f9960fe1c22053f31356528c39f4071ea4eaadd8484336040516103da93929190610af8565b60405180910390a25050505050565b80336103fb60808301606084016109c9565b6001600160a01b0316146104215760405162461bcd60e51b81526004016102a6906109eb565b8160046000610329836107a3565b6000813361044360408301602084016109c9565b6001600160a01b0316146104915760405162461bcd60e51b815260206004820152601560248201527473656c6c657220213d206d736753656e646572282960581b60448201526064016102a6565b600061049c846107a3565b90506000808281526020819052604090205460ff1660098111156104c2576104c261092f565b146105085760405162461bcd60e51b815260206004820152601660248201527539ba37b930b3b29039b637ba1031b7b63634b9b4b7b760511b60448201526064016102a6565b600034118015610528575061052560c085013560a0860135610b2f565b34145b6105695760405162461bcd60e51b81526020600482015260126024820152711ddc9bdb99c8195d1a195c88185b5bdd5b9d60721b60448201526064016102a6565b60008181526020819052604090819020805460ff19166001908117909155905182917fdb9be0a24c3d454708d973db0f9960fe1c22053f31356528c39f4071ea4eaadd916105ba9188913390610af8565b60405180910390a29392505050565b80336105db60408301602084016109c9565b6001600160a01b0316146106295760405162461bcd60e51b815260206004820152601560248201527473656c6c657220213d206d736753656e646572282960581b60448201526064016102a6565b8160086000610637836107a3565b9050600160008281526020819052604090205460ff16600981111561065e5761065e61092f565b1461067b5760405162461bcd60e51b81526004016102a690610a1b565b6000818152602081905260409020805483919060ff191660018360098111156106a6576106a661092f565b02179055506103a68561080d565b80336106c660608301604084016109c9565b6001600160a01b0316146107135760405162461bcd60e51b8152602060048201526014602482015273627579657220213d206d736753656e646572282960601b60448201526064016102a6565b8160066000610329836107a3565b803361073360808301606084016109c9565b6001600160a01b0316146107595760405162461bcd60e51b81526004016102a6906109eb565b8160096000610637836107a3565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561079d573d6000803e3d6000fd5b50505050565b6000816040516020016107b69190610b50565b604051602081830303815290604052805190602001209050919050565b61080a6107e360208301836109c9565b6107f360408401602085016109c9565b61080560c085013560a0860135610b2f565b610767565b50565b60c08101356001600061082360208501856109c9565b6001600160a01b03168152602081019190915260400160009081209061084f60a08501608086016109c9565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461087e9190610b2f565b9091555061080a905061089460208301836109c9565b6108a460608401604085016109c9565b8360a00135610767565b80356001600160a01b03811681146108c557600080fd5b919050565b600080604083850312156108dd57600080fd5b6108e6836108ae565b91506108f4602084016108ae565b90509250929050565b6000610120828403121561091057600080fd5b50919050565b60006020828403121561092857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600a811061096357634e487b7160e01b600052602160045260246000fd5b9052565b602081016109758284610945565b92915050565b600060208083528351808285015260005b818110156109a85785810183015185820160400152820161098c565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156109db57600080fd5b6109e4826108ae565b9392505050565b6020808252601690820152756172626974657220213d206d736753656e646572282960501b604082015260600190565b60208082526023908201527f57726f6e67206465616c207374617465206f72206465616c206973206d697373604082015262696e6760e81b606082015260800190565b6001600160a01b0380610a70836108ae565b16835280610a80602084016108ae565b16602084015280610a93604084016108ae565b16604084015250610aa6606082016108ae565b6001600160a01b03166060830152610ac0608082016108ae565b6001600160a01b0316608083015260a0818101359083015260c0808201359083015260e0808201359083015261010090810135910152565b6101608101610b078286610a5e565b610b15610120830185610945565b6001600160a01b0392909216610140919091015292915050565b8082018082111561097557634e487b7160e01b600052601160045260246000fd5b61012081016109758284610a5e56fea264697066735822122024f7e6f3c29cb4189da3204564427b6eb5de6639236be41be25cc9382ff31d7464736f6c63430008120033

Deployed Bytecode

0x6080604052600436106100915760003560e01c806381cd872a1161005957806381cd872a1461013e5780639b9ac2cb1461017b578063a52dfedc146101b3578063c219dc00146101d3578063ffa1ad74146101f357600080fd5b806321c0b342146100965780633ad23e1e146100b8578063518839d3146100d85780635d20aece146100f85780637456e1f61461011e575b600080fd5b3480156100a257600080fd5b506100b66100b13660046108ca565b610239565b005b3480156100c457600080fd5b506100b66100d33660046108fd565b6102e3565b3480156100e457600080fd5b506100b66100f33660046108fd565b6103e9565b61010b6101063660046108fd565b61042f565b6040519081526020015b60405180910390f35b34801561012a57600080fd5b506100b66101393660046108fd565b6105c9565b34801561014a57600080fd5b5061016e610159366004610916565b60006020819052908152604090205460ff1681565b6040516101159190610967565b34801561018757600080fd5b5061010b6101963660046108ca565b600160209081526000928352604080842090915290825290205481565b3480156101bf57600080fd5b506100b66101ce3660046108fd565b6106b4565b3480156101df57600080fd5b506100b66101ee3660046108fd565b610721565b3480156101ff57600080fd5b5061022c6040518060400160405280600d81526020016c0342e302d636f696e2d6470327609c1b81525081565b604051610115919061097b565b6001600160a01b0382166000908152600160209081526040808320338452909152902054806102af5760405162461bcd60e51b815260206004820152601760248201527f686173206e6f20616363756d756c61746564206665657300000000000000000060448201526064015b60405180910390fd5b6001600160a01b03831660009081526001602090815260408083203384529091528120556102de838383610767565b505050565b80336102f560808301606084016109c9565b6001600160a01b03161461031b5760405162461bcd60e51b81526004016102a6906109eb565b8160056000610329836107a3565b9050600160008281526020819052604090205460ff1660098111156103505761035061092f565b1461036d5760405162461bcd60e51b81526004016102a690610a1b565b6000818152602081905260409020805483919060ff191660018360098111156103985761039861092f565b02179055506103a6856107d3565b807fdb9be0a24c3d454708d973db0f9960fe1c22053f31356528c39f4071ea4eaadd8484336040516103da93929190610af8565b60405180910390a25050505050565b80336103fb60808301606084016109c9565b6001600160a01b0316146104215760405162461bcd60e51b81526004016102a6906109eb565b8160046000610329836107a3565b6000813361044360408301602084016109c9565b6001600160a01b0316146104915760405162461bcd60e51b815260206004820152601560248201527473656c6c657220213d206d736753656e646572282960581b60448201526064016102a6565b600061049c846107a3565b90506000808281526020819052604090205460ff1660098111156104c2576104c261092f565b146105085760405162461bcd60e51b815260206004820152601660248201527539ba37b930b3b29039b637ba1031b7b63634b9b4b7b760511b60448201526064016102a6565b600034118015610528575061052560c085013560a0860135610b2f565b34145b6105695760405162461bcd60e51b81526020600482015260126024820152711ddc9bdb99c8195d1a195c88185b5bdd5b9d60721b60448201526064016102a6565b60008181526020819052604090819020805460ff19166001908117909155905182917fdb9be0a24c3d454708d973db0f9960fe1c22053f31356528c39f4071ea4eaadd916105ba9188913390610af8565b60405180910390a29392505050565b80336105db60408301602084016109c9565b6001600160a01b0316146106295760405162461bcd60e51b815260206004820152601560248201527473656c6c657220213d206d736753656e646572282960581b60448201526064016102a6565b8160086000610637836107a3565b9050600160008281526020819052604090205460ff16600981111561065e5761065e61092f565b1461067b5760405162461bcd60e51b81526004016102a690610a1b565b6000818152602081905260409020805483919060ff191660018360098111156106a6576106a661092f565b02179055506103a68561080d565b80336106c660608301604084016109c9565b6001600160a01b0316146107135760405162461bcd60e51b8152602060048201526014602482015273627579657220213d206d736753656e646572282960601b60448201526064016102a6565b8160066000610329836107a3565b803361073360808301606084016109c9565b6001600160a01b0316146107595760405162461bcd60e51b81526004016102a6906109eb565b8160096000610637836107a3565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561079d573d6000803e3d6000fd5b50505050565b6000816040516020016107b69190610b50565b604051602081830303815290604052805190602001209050919050565b61080a6107e360208301836109c9565b6107f360408401602085016109c9565b61080560c085013560a0860135610b2f565b610767565b50565b60c08101356001600061082360208501856109c9565b6001600160a01b03168152602081019190915260400160009081209061084f60a08501608086016109c9565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461087e9190610b2f565b9091555061080a905061089460208301836109c9565b6108a460608401604085016109c9565b8360a00135610767565b80356001600160a01b03811681146108c557600080fd5b919050565b600080604083850312156108dd57600080fd5b6108e6836108ae565b91506108f4602084016108ae565b90509250929050565b6000610120828403121561091057600080fd5b50919050565b60006020828403121561092857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600a811061096357634e487b7160e01b600052602160045260246000fd5b9052565b602081016109758284610945565b92915050565b600060208083528351808285015260005b818110156109a85785810183015185820160400152820161098c565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156109db57600080fd5b6109e4826108ae565b9392505050565b6020808252601690820152756172626974657220213d206d736753656e646572282960501b604082015260600190565b60208082526023908201527f57726f6e67206465616c207374617465206f72206465616c206973206d697373604082015262696e6760e81b606082015260800190565b6001600160a01b0380610a70836108ae565b16835280610a80602084016108ae565b16602084015280610a93604084016108ae565b16604084015250610aa6606082016108ae565b6001600160a01b03166060830152610ac0608082016108ae565b6001600160a01b0316608083015260a0818101359083015260c0808201359083015260e0808201359083015261010090810135910152565b6101608101610b078286610a5e565b610b15610120830185610945565b6001600160a01b0392909216610140919091015292915050565b8082018082111561097557634e487b7160e01b600052601160045260246000fd5b61012081016109758284610a5e56fea264697066735822122024f7e6f3c29cb4189da3204564427b6eb5de6639236be41be25cc9382ff31d7464736f6c63430008120033

Deployed Bytecode Sourcemap

24745:811:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23778:238;;;;;;;;;;-1:-1:-1;23778:238:0;;;;;:::i;:::-;;:::i;:::-;;23213:201;;;;;;;;;;-1:-1:-1;23213:201:0;;;;;:::i;:::-;;:::i;23419:176::-;;;;;;;;;;-1:-1:-1;23419:176:0;;;;;:::i;:::-;;:::i;24872:427::-;;;;;;:::i;:::-;;:::i;:::-;;;802:25:1;;;790:2;775:18;24872:427:0;;;;;;;;23038:170;;;;;;;;;;-1:-1:-1;23038:170:0;;;;;:::i;:::-;;:::i;21628:42::-;;;;;;;;;;-1:-1:-1;21628:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;21674:59::-;;;;;;;;;;-1:-1:-1;21674:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22863:170;;;;;;;;;;-1:-1:-1;22863:170:0;;;;;:::i;:::-;;:::i;23600:173::-;;;;;;;;;;-1:-1:-1;23600:173:0;;;;;:::i;:::-;;:::i;24818:48::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24818:48:0;;;;;;;;;;;;:::i;23778:238::-;-1:-1:-1;;;;;23866:11:0;;23849:14;23866:11;;;:4;:11;;;;;;;;23878:10;23866:23;;;;;;;;23902:10;23894:46;;;;-1:-1:-1;;;23894:46:0;;2547:2:1;23894:46:0;;;2529:21:1;2586:2;2566:18;;;2559:30;2625:25;2605:18;;;2598:53;2668:18;;23894:46:0;;;;;;;;;-1:-1:-1;;;;;23945:11:0;;23971:1;23945:11;;;:4;:11;;;;;;;;23957:10;23945:23;;;;;;;:27;23977:34;23950:5;23994:8;24004:6;23977:9;:34::i;:::-;23844:172;23778:238;;:::o;23213:201::-;23313:4;22129:10;22113:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22113:26:0;;22105:61;;;;-1:-1:-1;;;22105:61:0;;;;;;;:::i;:::-;23343:4:::1;23349:34;21842:13;21858:14;21867:4;21858:8;:14::i;:::-;21842:30:::0;-1:-1:-1;21901:15:0::1;21885:5;:12:::0;;;::::1;::::0;;;;;;;::::1;;:31;::::0;::::1;;;;;;:::i;:::-;;21877:79;;;;-1:-1:-1::0;;;21877:79:0::1;;;;;;;:::i;:::-;21961:5;:12:::0;;;::::1;::::0;;;;;;:22;;21976:7;;21961:12;-1:-1:-1;;21961:22:0::1;::::0;21976:7;21961:22:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;23392:17:::2;23404:4;23392:11;:17::i;:::-;22012:5:::1;21999:46;22019:4;22025:7;22034:10;21999:46;;;;;;;;:::i;:::-;;;;;;;;21837:213;22171:1;;23213:201:::0;;:::o;23419:176::-;23507:4;22129:10;22113:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22113:26:0;;22105:61;;;;-1:-1:-1;;;22105:61:0;;;;;;;:::i;:::-;23534:4:::1;23540:26;21842:13;21858:14;21867:4;21858:8;:14::i;24872:427::-:0;24974:7;24959:4;22375:10;22360:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22360:25:0;;22352:59;;;;-1:-1:-1;;;22352:59:0;;5262:2:1;22352:59:0;;;5244:21:1;5301:2;5281:18;;;5274:30;-1:-1:-1;;;5320:18:1;;;5313:51;5381:18;;22352:59:0;5060:345:1;22352:59:0;24988:13:::1;25004:14;25013:4;25004:8;:14::i;:::-;24988:30:::0;-1:-1:-1;25047:14:0::1;25031:5:::0;:12;;;::::1;::::0;;;;;;;::::1;;:30;::::0;::::1;;;;;;:::i;:::-;;25023:65;;;::::0;-1:-1:-1;;;25023:65:0;;5612:2:1;25023:65:0::1;::::0;::::1;5594:21:1::0;5651:2;5631:18;;;5624:30;-1:-1:-1;;;5670:18:1;;;5663:52;5732:18;;25023:65:0::1;5410:346:1::0;25023:65:0::1;25113:1;25101:9;:13;:52;;;;-1:-1:-1::0;25131:22:0::1;25145:8;::::0;::::1;;25131:11;::::0;::::1;;:22;:::i;:::-;25118:9;:35;25101:52;25093:83;;;::::0;-1:-1:-1;;;25093:83:0;;6190:2:1;25093:83:0::1;::::0;::::1;6172:21:1::0;6229:2;6209:18;;;6202:30;-1:-1:-1;;;6248:18:1;;;6241:48;6306:18;;25093:83:0::1;5988:342:1::0;25093:83:0::1;25181:5;:12:::0;;;::::1;::::0;;;;;;;;:30;;-1:-1:-1;;25181:30:0::1;25196:15;25181:30:::0;;::::1;::::0;;;25223:54;;25181:12;;25223:54:::1;::::0;::::1;::::0;25243:4;;25266:10:::1;::::0;25223:54:::1;:::i;:::-;;;;;;;;25289:5:::0;24872:427;-1:-1:-1;;;24872:427:0:o;23038:170::-;23123:4;22375:10;22360:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22360:25:0;;22352:59;;;;-1:-1:-1;;;22352:59:0;;5262:2:1;22352:59:0;;;5244:21:1;5301:2;5281:18;;;5274:30;-1:-1:-1;;;5320:18:1;;;5313:51;5381:18;;22352:59:0;5060:345:1;22352:59:0;23150:4:::1;23156:24;21842:13;21858:14;21867:4;21858:8;:14::i;:::-;21842:30:::0;-1:-1:-1;21901:15:0::1;21885:5;:12:::0;;;::::1;::::0;;;;;;;::::1;;:31;::::0;::::1;;;;;;:::i;:::-;;21877:79;;;;-1:-1:-1::0;;;21877:79:0::1;;;;;;;:::i;:::-;21961:5;:12:::0;;;::::1;::::0;;;;;;:22;;21976:7;;21961:12;-1:-1:-1;;21961:22:0::1;::::0;21976:7;21961:22:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;23187:16:::2;23198:4;23187:10;:16::i;22863:170::-:0;22947:4;22252:10;22238;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22238:24:0;;22230:57;;;;-1:-1:-1;;;22230:57:0;;6537:2:1;22230:57:0;;;6519:21:1;6576:2;6556:18;;;6549:30;-1:-1:-1;;;6595:18:1;;;6588:50;6655:18;;22230:57:0;6335:344:1;22230:57:0;22974:4:::1;22980:24;21842:13;21858:14;21867:4;21858:8;:14::i;23600:173::-:0;23687:4;22129:10;22113:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22113:26:0;;22105:61;;;;-1:-1:-1;;;22105:61:0;;;;;;;:::i;:::-;23714:4:::1;23720:25;21842:13;21858:14;21867:4;21858:8;:14::i;25304:126::-:0;25396:29;;-1:-1:-1;;;;;25396:21:0;;;:29;;;;;25418:6;;25396:29;;;;25418:6;25396:21;:29;;;;;;;;;;;;;;;;;;;;;25304:126;;;:::o;24021:118::-;24086:7;24128:4;24117:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;24107:27;;;;;;24100:34;;24021:118;;;:::o;24144:122::-;24203:58;24213:10;;;;:4;:10;:::i;:::-;24225:11;;;;;;;;:::i;:::-;24238:22;24252:8;;;;24238:11;;;;:22;:::i;:::-;24203:9;:58::i;:::-;24144:122;:::o;24271:160::-;24367:8;;;;24329:4;:16;24334:10;;;;24367:4;24334:10;:::i;:::-;-1:-1:-1;;;;;24329:16:0;;;;;;;;;;;;-1:-1:-1;24329:16:0;;;;24346;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24329:34:0;-1:-1:-1;;;;;24329:34:0;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;24380:46:0;;-1:-1:-1;24390:10:0;;;;:4;:10;:::i;:::-;24402;;;;;;;;:::i;:::-;24414:4;:11;;;24380:9;:46::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:260::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;;408:38;442:2;431:9;427:18;408:38;:::i;:::-;398:48;;192:260;;;;;:::o;457:194::-;543:6;596:3;584:9;575:7;571:23;567:33;564:53;;;613:1;610;603:12;564:53;-1:-1:-1;636:9:1;457:194;-1:-1:-1;457:194:1:o;838:180::-;897:6;950:2;938:9;929:7;925:23;921:32;918:52;;;966:1;963;956:12;918:52;-1:-1:-1;989:23:1;;838:180;-1:-1:-1;838:180:1:o;1023:127::-;1084:10;1079:3;1075:20;1072:1;1065:31;1115:4;1112:1;1105:15;1139:4;1136:1;1129:15;1155:238;1236:2;1229:5;1226:13;1216:144;;1282:10;1277:3;1273:20;1270:1;1263:31;1317:4;1314:1;1307:15;1345:4;1342:1;1335:15;1216:144;1369:18;;1155:238::o;1398:207::-;1543:2;1528:18;;1555:44;1532:9;1581:6;1555:44;:::i;:::-;1398:207;;;;:::o;1792:548::-;1904:4;1933:2;1962;1951:9;1944:21;1994:6;1988:13;2037:6;2032:2;2021:9;2017:18;2010:34;2062:1;2072:140;2086:6;2083:1;2080:13;2072:140;;;2181:14;;;2177:23;;2171:30;2147:17;;;2166:2;2143:26;2136:66;2101:10;;2072:140;;;2076:3;2261:1;2256:2;2247:6;2236:9;2232:22;2228:31;2221:42;2331:2;2324;2320:7;2315:2;2307:6;2303:15;2299:29;2288:9;2284:45;2280:54;2272:62;;;;1792:548;;;;:::o;2697:186::-;2756:6;2809:2;2797:9;2788:7;2784:23;2780:32;2777:52;;;2825:1;2822;2815:12;2777:52;2848:29;2867:9;2848:29;:::i;:::-;2838:39;2697:186;-1:-1:-1;;;2697:186:1:o;2888:346::-;3090:2;3072:21;;;3129:2;3109:18;;;3102:30;-1:-1:-1;;;3163:2:1;3148:18;;3141:52;3225:2;3210:18;;2888:346::o;3239:399::-;3441:2;3423:21;;;3480:2;3460:18;;;3453:30;3519:34;3514:2;3499:18;;3492:62;-1:-1:-1;;;3585:2:1;3570:18;;3563:33;3628:3;3613:19;;3239:399::o;3752:839::-;-1:-1:-1;;;;;3833:19:1;3877:25;3896:5;3877:25;:::i;:::-;3873:34;3868:3;3861:47;3982:2;3944:36;3974:4;3967:5;3963:16;3944:36;:::i;:::-;3940:45;3933:4;3928:3;3924:14;3917:69;4060:2;4022:36;4052:4;4045:5;4041:16;4022:36;:::i;:::-;4018:45;4011:4;4006:3;4002:14;3995:69;;4093:36;4123:4;4116:5;4112:16;4093:36;:::i;:::-;-1:-1:-1;;;;;3709:31:1;4180:4;4171:14;;3697:44;4217:36;4247:4;4236:16;;4217:36;:::i;:::-;-1:-1:-1;;;;;3709:31:1;4306:4;4297:14;;3697:44;4368:4;4357:16;;;4344:30;4328:14;;;4321:54;4431:4;4420:16;;;4407:30;4391:14;;;4384:54;4494:4;4483:16;;;4470:30;4454:14;;;4447:54;4520:6;4569:14;;;4556:28;4542:12;;4535:50;3752:839::o;4596:459::-;4849:3;4834:19;;4862:54;4838:9;4898:6;4862:54;:::i;:::-;4925;4974:3;4963:9;4959:19;4951:6;4925:54;:::i;:::-;-1:-1:-1;;;;;5016:32:1;;;;5010:3;4995:19;;;;4988:61;4596:459;;-1:-1:-1;;4596:459:1:o;5761:222::-;5826:9;;;5847:10;;;5844:133;;;5899:10;5894:3;5890:20;5887:1;5880:31;5934:4;5931:1;5924:15;5962:4;5959:1;5952:15;6684:259;6870:3;6855:19;;6883:54;6859:9;6919:6;6883:54;:::i

Swarm Source

ipfs://24f7e6f3c29cb4189da3204564427b6eb5de6639236be41be25cc9382ff31d74

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.