Overview
ETH Balance
0.029042508959240803 ETH
Eth Value
$90.05 (@ $3,100.59/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 77 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Clear Deal Selle... | 20246000 | 4 days ago | IN | 0 ETH | 0.00014501 | ||||
Start Deal | 20245632 | 4 days ago | IN | 2.307077 ETH | 0.0001608 | ||||
Clear Deal Selle... | 20212708 | 8 days ago | IN | 0 ETH | 0.0004675 | ||||
Start Deal | 20212610 | 8 days ago | IN | 0.96824 ETH | 0.00088173 | ||||
Clear Deal Selle... | 20177630 | 13 days ago | IN | 0 ETH | 0.00035303 | ||||
Start Deal | 20177560 | 13 days ago | IN | 1.680849 ETH | 0.00049166 | ||||
Clear Deal Selle... | 20140974 | 18 days ago | IN | 0 ETH | 0.00041018 | ||||
Start Deal | 20140726 | 18 days ago | IN | 0.776929 ETH | 0.00062546 | ||||
Clear Deal Selle... | 20140637 | 18 days ago | IN | 0 ETH | 0.00072832 | ||||
Start Deal | 20140591 | 18 days ago | IN | 0.152121 ETH | 0.00044786 | ||||
Clear Deal Selle... | 20083835 | 26 days ago | IN | 0 ETH | 0.0009835 | ||||
Start Deal | 20083773 | 26 days ago | IN | 0.99532 ETH | 0.00092061 | ||||
Clear Deal Selle... | 20063140 | 29 days ago | IN | 0 ETH | 0.00154688 | ||||
Start Deal | 20063050 | 29 days ago | IN | 1.252202 ETH | 0.00081281 | ||||
Clear Deal Selle... | 20054785 | 30 days ago | IN | 0 ETH | 0.00059219 | ||||
Start Deal | 20054751 | 30 days ago | IN | 0.926134 ETH | 0.00054591 | ||||
Clear Deal Selle... | 20013731 | 36 days ago | IN | 0 ETH | 0.00064333 | ||||
Start Deal | 20013603 | 36 days ago | IN | 0.891633 ETH | 0.00069179 | ||||
Clear Deal Selle... | 19809667 | 65 days ago | IN | 0 ETH | 0.0003097 | ||||
Start Deal | 19809608 | 65 days ago | IN | 1.167695 ETH | 0.00031895 | ||||
Clear Deal Selle... | 19697210 | 80 days ago | IN | 0 ETH | 0.00052804 | ||||
Start Deal | 19697109 | 80 days ago | IN | 0.973081 ETH | 0.00055059 | ||||
Clear Deal Selle... | 19697055 | 80 days ago | IN | 0 ETH | 0.00044888 | ||||
Start Deal | 19697011 | 80 days ago | IN | 0.973135 ETH | 0.0005075 | ||||
Clear Deal Selle... | 19696982 | 80 days ago | IN | 0 ETH | 0.00049207 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20246000 | 4 days ago | 2.30476992 ETH | ||||
20212708 | 8 days ago | 0.96727176 ETH | ||||
20177630 | 13 days ago | 1.67916815 ETH | ||||
20140974 | 18 days ago | 0.77615207 ETH | ||||
20140637 | 18 days ago | 0.15196887 ETH | ||||
20083835 | 26 days ago | 0.99432468 ETH | ||||
20063140 | 29 days ago | 1.25094979 ETH | ||||
20054785 | 30 days ago | 0.92520786 ETH | ||||
20013731 | 36 days ago | 0.89074136 ETH | ||||
19809667 | 65 days ago | 1.1665273 ETH | ||||
19697210 | 80 days ago | 0.97210791 ETH | ||||
19697055 | 80 days ago | 0.97216186 ETH | ||||
19696982 | 80 days ago | 0.8679272 ETH | ||||
19695573 | 81 days ago | 1.01040658 ETH | ||||
19625774 | 90 days ago | 0.000084 ETH | ||||
19623845 | 91 days ago | 0.000298 ETH | ||||
19616909 | 92 days ago | 0.99118782 ETH | ||||
19589769 | 95 days ago | 0.999 ETH | ||||
19483816 | 110 days ago | 0.98534966 ETH | ||||
19440371 | 116 days ago | 0.9978971 ETH | ||||
19433388 | 117 days ago | 0.98901 ETH | ||||
19385021 | 124 days ago | 0.999 ETH | ||||
19262806 | 141 days ago | 0.69584945 ETH | ||||
19262756 | 141 days ago | 1.20046533 ETH | ||||
19262724 | 141 days ago | 0.71240088 ETH |
Loading...
Loading
Contract Name:
DP2PCoin
Compiler Version
v0.8.18+commit.87f61d96
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,103.32 | 0.029 | $90.13 |
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.