Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CoWUidGenerator
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-03-05
*/
// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.7.6;
pragma abicoder v2;
interface GPv2SettlementContract {
function domainSeparator() external view returns (bytes32);
}
contract CoWUidGenerator {
using GPv2Order for GPv2Order.Data;
GPv2SettlementContract settlement = GPv2SettlementContract(0x9008D19f58AAbD9eD0D60971565AA8510560ab41);
function getUid(
address sellToken,
address buyToken,
address receiver,
uint256 sellAmount,
uint256 buyAmount,
uint32 validTo,
bytes32 appData,
uint256 feeAmount,
bool isSell,
bool partiallyFillable)
public view returns (bytes32 hash, bytes memory encoded){
bytes32 kind = 0x6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc;
if (isSell) {
kind = 0xf3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775;
}
GPv2Order.Data memory order = GPv2Order.Data(
sellToken,
buyToken,
receiver,
sellAmount,
buyAmount,
validTo,
appData,
feeAmount,
kind,
partiallyFillable,
0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9,
0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9
);
hash = order.hash(settlement.domainSeparator());
encoded = abi.encode(order);
}
}
library GPv2Order {
/// @dev The complete data for a Gnosis Protocol order. This struct contains
/// all order parameters that are signed for submitting to GP.
struct Data {
address sellToken;
address buyToken;
address receiver;
uint256 sellAmount;
uint256 buyAmount;
uint32 validTo;
bytes32 appData;
uint256 feeAmount;
bytes32 kind;
bool partiallyFillable;
bytes32 sellTokenBalance;
bytes32 buyTokenBalance;
}
/// @dev The order EIP-712 type hash for the [`GPv2Order.Data`] struct.
///
/// This value is pre-computed from the following expression:
/// ```
/// keccak256(
/// "Order(" +
/// "address sellToken," +
/// "address buyToken," +
/// "address receiver," +
/// "uint256 sellAmount," +
/// "uint256 buyAmount," +
/// "uint32 validTo," +
/// "bytes32 appData," +
/// "uint256 feeAmount," +
/// "string kind," +
/// "bool partiallyFillable" +
/// "string sellTokenBalance" +
/// "string buyTokenBalance" +
/// ")"
/// )
/// ```
bytes32 internal constant TYPE_HASH =
hex"d5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e489";
/// @dev The marker value for a sell order for computing the order struct
/// hash. This allows the EIP-712 compatible wallets to display a
/// descriptive string for the order kind (instead of 0 or 1).
///
/// This value is pre-computed from the following expression:
/// ```
/// keccak256("sell")
/// ```
bytes32 internal constant KIND_SELL =
hex"f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775";
/// @dev The OrderKind marker value for a buy order for computing the order
/// struct hash.
///
/// This value is pre-computed from the following expression:
/// ```
/// keccak256("buy")
/// ```
bytes32 internal constant KIND_BUY =
hex"6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc";
/// @dev The TokenBalance marker value for using direct ERC20 balances for
/// computing the order struct hash.
///
/// This value is pre-computed from the following expression:
/// ```
/// keccak256("erc20")
/// ```
bytes32 internal constant BALANCE_ERC20 =
hex"5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9";
/// @dev The TokenBalance marker value for using Balancer Vault external
/// balances (in order to re-use Vault ERC20 approvals) for computing the
/// order struct hash.
///
/// This value is pre-computed from the following expression:
/// ```
/// keccak256("external")
/// ```
bytes32 internal constant BALANCE_EXTERNAL =
hex"abee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea0632";
/// @dev The TokenBalance marker value for using Balancer Vault internal
/// balances for computing the order struct hash.
///
/// This value is pre-computed from the following expression:
/// ```
/// keccak256("internal")
/// ```
bytes32 internal constant BALANCE_INTERNAL =
hex"4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce";
/// @dev Marker address used to indicate that the receiver of the trade
/// proceeds should the owner of the order.
///
/// This is chosen to be `address(0)` for gas efficiency as it is expected
/// to be the most common case.
address internal constant RECEIVER_SAME_AS_OWNER = address(0);
/// @dev The byte length of an order unique identifier.
uint256 internal constant UID_LENGTH = 56;
/// @dev Returns the actual receiver for an order. This function checks
/// whether or not the [`receiver`] field uses the marker value to indicate
/// it is the same as the order owner.
///
/// @return receiver The actual receiver of trade proceeds.
function actualReceiver(Data memory order, address owner)
internal
pure
returns (address receiver)
{
if (order.receiver == RECEIVER_SAME_AS_OWNER) {
receiver = owner;
} else {
receiver = order.receiver;
}
}
/// @dev Return the EIP-712 signing hash for the specified order.
///
/// @param order The order to compute the EIP-712 signing hash for.
/// @param domainSeparator The EIP-712 domain separator to use.
/// @return orderDigest The 32 byte EIP-712 struct hash.
function hash(Data memory order, bytes32 domainSeparator)
internal
pure
returns (bytes32 orderDigest)
{
bytes32 structHash;
// NOTE: Compute the EIP-712 order struct hash in place. As suggested
// in the EIP proposal, noting that the order struct has 10 fields, and
// including the type hash `(12 + 1) * 32 = 416` bytes to hash.
// <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#rationale-for-encodedata>
// solhint-disable-next-line no-inline-assembly
assembly {
let dataStart := sub(order, 32)
let temp := mload(dataStart)
mstore(dataStart, TYPE_HASH)
structHash := keccak256(dataStart, 416)
mstore(dataStart, temp)
}
// NOTE: Now that we have the struct hash, compute the EIP-712 signing
// hash using scratch memory past the free memory pointer. The signing
// hash is computed from `"\x19\x01" || domainSeparator || structHash`.
// <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory>
// <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification>
// solhint-disable-next-line no-inline-assembly
assembly {
let freeMemoryPointer := mload(0x40)
mstore(freeMemoryPointer, "\x19\x01")
mstore(add(freeMemoryPointer, 2), domainSeparator)
mstore(add(freeMemoryPointer, 34), structHash)
orderDigest := keccak256(freeMemoryPointer, 66)
}
}
/// @dev Packs order UID parameters into the specified memory location. The
/// result is equivalent to `abi.encodePacked(...)` with the difference that
/// it allows re-using the memory for packing the order UID.
///
/// This function reverts if the order UID buffer is not the correct size.
///
/// @param orderUid The buffer pack the order UID parameters into.
/// @param orderDigest The EIP-712 struct digest derived from the order
/// parameters.
/// @param owner The address of the user who owns this order.
/// @param validTo The epoch time at which the order will stop being valid.
function packOrderUidParams(
bytes memory orderUid,
bytes32 orderDigest,
address owner,
uint32 validTo
) internal pure {
require(orderUid.length == UID_LENGTH, "GPv2: uid buffer overflow");
// NOTE: Write the order UID to the allocated memory buffer. The order
// parameters are written to memory in **reverse order** as memory
// operations write 32-bytes at a time and we want to use a packed
// encoding. This means, for example, that after writing the value of
// `owner` to bytes `20:52`, writing the `orderDigest` to bytes `0:32`
// will **overwrite** bytes `20:32`. This is desirable as addresses are
// only 20 bytes and `20:32` should be `0`s:
//
// | 1111111111222222222233333333334444444444555555
// byte | 01234567890123456789012345678901234567890123456789012345
// -------+---------------------------------------------------------
// field | [.........orderDigest..........][......owner.......][vT]
// -------+---------------------------------------------------------
// mstore | [000000000000000000000000000.vT]
// | [00000000000.......owner.......]
// | [.........orderDigest..........]
//
// Additionally, since Solidity `bytes memory` are length prefixed,
// 32 needs to be added to all the offsets.
//
// solhint-disable-next-line no-inline-assembly
assembly {
mstore(add(orderUid, 56), validTo)
mstore(add(orderUid, 52), owner)
mstore(add(orderUid, 32), orderDigest)
}
}
/// @dev Extracts specific order information from the standardized unique
/// order id of the protocol.
///
/// @param orderUid The unique identifier used to represent an order in
/// the protocol. This uid is the packed concatenation of the order digest,
/// the validTo order parameter and the address of the user who created the
/// order. It is used by the user to interface with the contract directly,
/// and not by calls that are triggered by the solvers.
/// @return orderDigest The EIP-712 signing digest derived from the order
/// parameters.
/// @return owner The address of the user who owns this order.
/// @return validTo The epoch time at which the order will stop being valid.
function extractOrderUidParams(bytes calldata orderUid)
internal
pure
returns (
bytes32 orderDigest,
address owner,
uint32 validTo
)
{
require(orderUid.length == UID_LENGTH, "GPv2: invalid uid");
// Use assembly to efficiently decode packed calldata.
// solhint-disable-next-line no-inline-assembly
assembly {
orderDigest := calldataload(orderUid.offset)
owner := shr(96, calldataload(add(orderUid.offset, 32)))
validTo := shr(224, calldataload(add(orderUid.offset, 52)))
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bool","name":"isSell","type":"bool"},{"internalType":"bool","name":"partiallyFillable","type":"bool"}],"name":"getUid","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"encoded","type":"bytes"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052739008d19f58aabd9ed0d60971565aa8510560ab416000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006457600080fd5b506107bf806100746000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80635871d10a14610030575b600080fd5b61004a6004803603810190610045919061037b565b610061565b604051610058929190610608565b60405180910390f35b6000606060007f6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc60001b905084156100ba577ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560001b90505b60006040518061018001604052808f73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c81526020018b81526020018a63ffffffff16815260200189815260200188815260200183815260200186151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b81526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b815250905061025060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561020957600080fd5b505afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190610456565b8261028590919063ffffffff16565b9350806040516020016102639190610638565b604051602081830303815290604052925050509a509a98505050505050505050565b6000806020840380517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a08220925080825250506040517f19010000000000000000000000000000000000000000000000000000000000008152836002820152816022820152604281209250505092915050565b60008135905061030c81610716565b92915050565b6000813590506103218161072d565b92915050565b60008135905061033681610744565b92915050565b60008151905061034b81610744565b92915050565b6000813590506103608161075b565b92915050565b60008135905061037581610772565b92915050565b6000806000806000806000806000806101408b8d03121561039b57600080fd5b60006103a98d828e016102fd565b9a505060206103ba8d828e016102fd565b99505060406103cb8d828e016102fd565b98505060606103dc8d828e01610351565b97505060806103ed8d828e01610351565b96505060a06103fe8d828e01610366565b95505060c061040f8d828e01610327565b94505060e06104208d828e01610351565b9350506101006104328d828e01610312565b9250506101206104448d828e01610312565b9150509295989b9194979a5092959850565b60006020828403121561046857600080fd5b60006104768482850161033c565b91505092915050565b61048881610670565b82525050565b61049781610682565b82525050565b6104a68161068e565b82525050565b6104b58161068e565b82525050565b60006104c682610654565b6104d0818561065f565b93506104e08185602086016106d2565b6104e981610705565b840191505092915050565b6101808201600082015161050b600085018261047f565b50602082015161051e602085018261047f565b506040820151610531604085018261047f565b50606082015161054460608501826105ea565b50608082015161055760808501826105ea565b5060a082015161056a60a08501826105f9565b5060c082015161057d60c085018261049d565b5060e082015161059060e08501826105ea565b506101008201516105a561010085018261049d565b506101208201516105ba61012085018261048e565b506101408201516105cf61014085018261049d565b506101608201516105e461016085018261049d565b50505050565b6105f3816106b8565b82525050565b610602816106c2565b82525050565b600060408201905061061d60008301856104ac565b818103602083015261062f81846104bb565b90509392505050565b60006101808201905061064e60008301846104f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061067b82610698565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156106f05780820151818401526020810190506106d5565b838111156106ff576000848401525b50505050565b6000601f19601f8301169050919050565b61071f81610670565b811461072a57600080fd5b50565b61073681610682565b811461074157600080fd5b50565b61074d8161068e565b811461075857600080fd5b50565b610764816106b8565b811461076f57600080fd5b50565b61077b816106c2565b811461078657600080fd5b5056fea264697066735822122040ad3b53ec465b51bb09cdc3720f0e2ed42693f85c3c5f741297035a59b64be364736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80635871d10a14610030575b600080fd5b61004a6004803603810190610045919061037b565b610061565b604051610058929190610608565b60405180910390f35b6000606060007f6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc60001b905084156100ba577ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560001b90505b60006040518061018001604052808f73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c81526020018b81526020018a63ffffffff16815260200189815260200188815260200183815260200186151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b81526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b815250905061025060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561020957600080fd5b505afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190610456565b8261028590919063ffffffff16565b9350806040516020016102639190610638565b604051602081830303815290604052925050509a509a98505050505050505050565b6000806020840380517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a08220925080825250506040517f19010000000000000000000000000000000000000000000000000000000000008152836002820152816022820152604281209250505092915050565b60008135905061030c81610716565b92915050565b6000813590506103218161072d565b92915050565b60008135905061033681610744565b92915050565b60008151905061034b81610744565b92915050565b6000813590506103608161075b565b92915050565b60008135905061037581610772565b92915050565b6000806000806000806000806000806101408b8d03121561039b57600080fd5b60006103a98d828e016102fd565b9a505060206103ba8d828e016102fd565b99505060406103cb8d828e016102fd565b98505060606103dc8d828e01610351565b97505060806103ed8d828e01610351565b96505060a06103fe8d828e01610366565b95505060c061040f8d828e01610327565b94505060e06104208d828e01610351565b9350506101006104328d828e01610312565b9250506101206104448d828e01610312565b9150509295989b9194979a5092959850565b60006020828403121561046857600080fd5b60006104768482850161033c565b91505092915050565b61048881610670565b82525050565b61049781610682565b82525050565b6104a68161068e565b82525050565b6104b58161068e565b82525050565b60006104c682610654565b6104d0818561065f565b93506104e08185602086016106d2565b6104e981610705565b840191505092915050565b6101808201600082015161050b600085018261047f565b50602082015161051e602085018261047f565b506040820151610531604085018261047f565b50606082015161054460608501826105ea565b50608082015161055760808501826105ea565b5060a082015161056a60a08501826105f9565b5060c082015161057d60c085018261049d565b5060e082015161059060e08501826105ea565b506101008201516105a561010085018261049d565b506101208201516105ba61012085018261048e565b506101408201516105cf61014085018261049d565b506101608201516105e461016085018261049d565b50505050565b6105f3816106b8565b82525050565b610602816106c2565b82525050565b600060408201905061061d60008301856104ac565b818103602083015261062f81846104bb565b90509392505050565b60006101808201905061064e60008301846104f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061067b82610698565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156106f05780820151818401526020810190506106d5565b838111156106ff576000848401525b50505050565b6000601f19601f8301169050919050565b61071f81610670565b811461072a57600080fd5b50565b61073681610682565b811461074157600080fd5b50565b61074d8161068e565b811461075857600080fd5b50565b610764816106b8565b811461076f57600080fd5b50565b61077b816106c2565b811461078657600080fd5b5056fea264697066735822122040ad3b53ec465b51bb09cdc3720f0e2ed42693f85c3c5f741297035a59b64be364736f6c63430007060033
Deployed Bytecode Sourcemap
201:1334:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;385:1147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;711:12;726:20;758:12;773:66;758:81;;;;854:6;850:112;;;884:66;877:73;;;;850:112;972:27;1003:425;;;;;;;;1032:9;1003:425;;;;;;1056:8;1003:425;;;;;;1079:8;1003:425;;;;;;1102:10;1003:425;;;;1127:9;1003:425;;;;1151:7;1003:425;;;;;;1173:7;1003:425;;;;1195:9;1003:425;;;;1219:4;1003:425;;;;1238:17;1003:425;;;;;;1270:66;1003:425;;;;;;1351:66;1003:425;;;;;972:456;;1446:40;1457:10;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1446:5;:10;;:40;;;;:::i;:::-;1439:47;;1518:5;1507:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;1497:27;;385:1147;;;;;;;;;;;;;;;:::o;6295:1622::-;6403:19;6440:18;6913:2;6906:5;6902:14;6948:9;6942:16;6990:9;6979;6972:28;7049:3;7038:9;7028:25;7014:39;;7085:4;7074:9;7067:23;6870:231;;7658:4;7652:11;7703:10;7684:17;7677:37;7762:15;7758:1;7739:17;7735:25;7728:50;7827:10;7822:2;7803:17;7799:26;7792:46;7896:2;7877:17;7867:32;7852:47;;7612:298;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:143::-;;524:6;518:13;509:22;;540:33;567:5;540:33;:::i;:::-;499:80;;;;:::o;585:139::-;;669:6;656:20;647:29;;685:33;712:5;685:33;:::i;:::-;637:87;;;;:::o;730:137::-;;813:6;800:20;791:29;;829:32;855:5;829:32;:::i;:::-;781:86;;;;:::o;873:1560::-;;;;;;;;;;;1127:3;1115:9;1106:7;1102:23;1098:33;1095:2;;;1144:1;1141;1134:12;1095:2;1187:1;1212:53;1257:7;1248:6;1237:9;1233:22;1212:53;:::i;:::-;1202:63;;1158:117;1314:2;1340:53;1385:7;1376:6;1365:9;1361:22;1340:53;:::i;:::-;1330:63;;1285:118;1442:2;1468:53;1513:7;1504:6;1493:9;1489:22;1468:53;:::i;:::-;1458:63;;1413:118;1570:2;1596:53;1641:7;1632:6;1621:9;1617:22;1596:53;:::i;:::-;1586:63;;1541:118;1698:3;1725:53;1770:7;1761:6;1750:9;1746:22;1725:53;:::i;:::-;1715:63;;1669:119;1827:3;1854:52;1898:7;1889:6;1878:9;1874:22;1854:52;:::i;:::-;1844:62;;1798:118;1955:3;1982:53;2027:7;2018:6;2007:9;2003:22;1982:53;:::i;:::-;1972:63;;1926:119;2084:3;2111:53;2156:7;2147:6;2136:9;2132:22;2111:53;:::i;:::-;2101:63;;2055:119;2213:3;2240:50;2282:7;2273:6;2262:9;2258:22;2240:50;:::i;:::-;2230:60;;2184:116;2339:3;2366:50;2408:7;2399:6;2388:9;2384:22;2366:50;:::i;:::-;2356:60;;2310:116;1085:1348;;;;;;;;;;;;;:::o;2439:284::-;;2558:2;2546:9;2537:7;2533:23;2529:32;2526:2;;;2574:1;2571;2564:12;2526:2;2617:1;2642:64;2698:7;2689:6;2678:9;2674:22;2642:64;:::i;:::-;2632:74;;2588:128;2516:207;;;;:::o;2729:108::-;2806:24;2824:5;2806:24;:::i;:::-;2801:3;2794:37;2784:53;;:::o;2843:99::-;2914:21;2929:5;2914:21;:::i;:::-;2909:3;2902:34;2892:50;;:::o;2948:108::-;3025:24;3043:5;3025:24;:::i;:::-;3020:3;3013:37;3003:53;;:::o;3062:118::-;3149:24;3167:5;3149:24;:::i;:::-;3144:3;3137:37;3127:53;;:::o;3186:360::-;;3300:38;3332:5;3300:38;:::i;:::-;3354:70;3417:6;3412:3;3354:70;:::i;:::-;3347:77;;3433:52;3478:6;3473:3;3466:4;3459:5;3455:16;3433:52;:::i;:::-;3510:29;3532:6;3510:29;:::i;:::-;3505:3;3501:39;3494:46;;3276:270;;;;;:::o;3606:2320::-;3745:6;3740:3;3736:16;3839:4;3832:5;3828:16;3822:23;3858:63;3915:4;3910:3;3906:14;3892:12;3858:63;:::i;:::-;3762:169;4017:4;4010:5;4006:16;4000:23;4036:63;4093:4;4088:3;4084:14;4070:12;4036:63;:::i;:::-;3941:168;4195:4;4188:5;4184:16;4178:23;4214:63;4271:4;4266:3;4262:14;4248:12;4214:63;:::i;:::-;4119:168;4375:4;4368:5;4364:16;4358:23;4394:63;4451:4;4446:3;4442:14;4428:12;4394:63;:::i;:::-;4297:170;4554:4;4547:5;4543:16;4537:23;4573:63;4630:4;4625:3;4621:14;4607:12;4573:63;:::i;:::-;4477:169;4731:4;4724:5;4720:16;4714:23;4750:61;4805:4;4800:3;4796:14;4782:12;4750:61;:::i;:::-;4656:165;4906:4;4899:5;4895:16;4889:23;4925:63;4982:4;4977:3;4973:14;4959:12;4925:63;:::i;:::-;4831:167;5085:4;5078:5;5074:16;5068:23;5104:63;5161:4;5156:3;5152:14;5138:12;5104:63;:::i;:::-;5008:169;5259:6;5252:5;5248:18;5242:25;5280:65;5337:6;5332:3;5328:16;5314:12;5280:65;:::i;:::-;5187:168;5450:6;5443:5;5439:18;5433:25;5471:59;5522:6;5517:3;5513:16;5499:12;5471:59;:::i;:::-;5365:175;5634:6;5627:5;5623:18;5617:25;5655:65;5712:6;5707:3;5703:16;5689:12;5655:65;:::i;:::-;5550:180;5823:6;5816:5;5812:18;5806:25;5844:65;5901:6;5896:3;5892:16;5878:12;5844:65;:::i;:::-;5740:179;3714:2212;;;:::o;5932:108::-;6009:24;6027:5;6009:24;:::i;:::-;6004:3;5997:37;5987:53;;:::o;6046:105::-;6121:23;6138:5;6121:23;:::i;:::-;6116:3;6109:36;6099:52;;:::o;6157:419::-;;6334:2;6323:9;6319:18;6311:26;;6347:71;6415:1;6404:9;6400:17;6391:6;6347:71;:::i;:::-;6465:9;6459:4;6455:20;6450:2;6439:9;6435:18;6428:48;6493:76;6564:4;6555:6;6493:76;:::i;:::-;6485:84;;6301:275;;;;;:::o;6582:307::-;;6755:3;6744:9;6740:19;6732:27;;6769:113;6879:1;6868:9;6864:17;6855:6;6769:113;:::i;:::-;6722:167;;;;:::o;6895:98::-;;6980:5;6974:12;6964:22;;6953:40;;;:::o;6999:168::-;;7116:6;7111:3;7104:19;7156:4;7151:3;7147:14;7132:29;;7094:73;;;;:::o;7173:96::-;;7239:24;7257:5;7239:24;:::i;:::-;7228:35;;7218:51;;;:::o;7275:90::-;;7352:5;7345:13;7338:21;7327:32;;7317:48;;;:::o;7371:77::-;;7437:5;7426:16;;7416:32;;;:::o;7454:126::-;;7531:42;7524:5;7520:54;7509:65;;7499:81;;;:::o;7586:77::-;;7652:5;7641:16;;7631:32;;;:::o;7669:93::-;;7745:10;7738:5;7734:22;7723:33;;7713:49;;;:::o;7768:307::-;7836:1;7846:113;7860:6;7857:1;7854:13;7846:113;;;7945:1;7940:3;7936:11;7930:18;7926:1;7921:3;7917:11;7910:39;7882:2;7879:1;7875:10;7870:15;;7846:113;;;7977:6;7974:1;7971:13;7968:2;;;8057:1;8048:6;8043:3;8039:16;8032:27;7968:2;7817:258;;;;:::o;8081:102::-;;8173:2;8169:7;8164:2;8157:5;8153:14;8149:28;8139:38;;8129:54;;;:::o;8189:122::-;8262:24;8280:5;8262:24;:::i;:::-;8255:5;8252:35;8242:2;;8301:1;8298;8291:12;8242:2;8232:79;:::o;8317:116::-;8387:21;8402:5;8387:21;:::i;:::-;8380:5;8377:32;8367:2;;8423:1;8420;8413:12;8367:2;8357:76;:::o;8439:122::-;8512:24;8530:5;8512:24;:::i;:::-;8505:5;8502:35;8492:2;;8551:1;8548;8541:12;8492:2;8482:79;:::o;8567:122::-;8640:24;8658:5;8640:24;:::i;:::-;8633:5;8630:35;8620:2;;8679:1;8676;8669:12;8620:2;8610:79;:::o;8695:120::-;8767:23;8784:5;8767:23;:::i;:::-;8760:5;8757:34;8747:2;;8805:1;8802;8795:12;8747:2;8737:78;:::o
Swarm Source
ipfs://40ad3b53ec465b51bb09cdc3720f0e2ed42693f85c3c5f741297035a59b64be3
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.