Latest 25 from a total of 237,689 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Invalidate Order... | 24510538 | 7 mins ago | IN | 0 ETH | 0.00000284 | ||||
| Create Order | 24510472 | 20 mins ago | IN | 0.25 ETH | 0.00011444 | ||||
| Create Order | 24510460 | 22 mins ago | IN | 2.00001964 ETH | 0.00000675 | ||||
| Create Order | 24510412 | 32 mins ago | IN | 0.015 ETH | 0.00011433 | ||||
| Create Order | 24510387 | 37 mins ago | IN | 0.25 ETH | 0.00011444 | ||||
| Invalidate Order | 24510382 | 38 mins ago | IN | 0 ETH | 0.00005059 | ||||
| Create Order | 24510375 | 39 mins ago | IN | 0.048 ETH | 0.000058 | ||||
| Create Order | 24510347 | 45 mins ago | IN | 0.25 ETH | 0.0001144 | ||||
| Create Order | 24510332 | 48 mins ago | IN | 0.1 ETH | 0.00005808 | ||||
| Invalidate Order | 24510327 | 49 mins ago | IN | 0 ETH | 0.00005045 | ||||
| Create Order | 24510321 | 50 mins ago | IN | 0.13 ETH | 0.00005793 | ||||
| Create Order | 24510309 | 52 mins ago | IN | 0.048 ETH | 0.00005775 | ||||
| Invalidate Order | 24510302 | 54 mins ago | IN | 0 ETH | 0.0000505 | ||||
| Create Order | 24510293 | 56 mins ago | IN | 0.04 ETH | 0.00005799 | ||||
| Create Order | 24510245 | 1 hr ago | IN | 0.125 ETH | 0.0001144 | ||||
| Create Order | 24510237 | 1 hr ago | IN | 0.25 ETH | 0.00011444 | ||||
| Create Order | 24510234 | 1 hr ago | IN | 0.048 ETH | 0.00005815 | ||||
| Create Order | 24510201 | 1 hr ago | IN | 13.15 ETH | 0.00011431 | ||||
| Create Order | 24510155 | 1 hr ago | IN | 0.051 ETH | 0.00000618 | ||||
| Create Order | 24510118 | 1 hr ago | IN | 0.021 ETH | 0.00000628 | ||||
| Create Order | 24510117 | 1 hr ago | IN | 0.046 ETH | 0.00005797 | ||||
| Create Order | 24510114 | 1 hr ago | IN | 0.042 ETH | 0.00000625 | ||||
| Create Order | 24510092 | 1 hr ago | IN | 0.1 ETH | 0.00005793 | ||||
| Create Order | 24510090 | 1 hr ago | IN | 0.43 ETH | 0.00000617 | ||||
| Create Order | 24509982 | 1 hr ago | IN | 0.2 ETH | 0.0000019 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24510538 | 7 mins ago | 0.25 ETH | ||||
| Transfer | 24510538 | 7 mins ago | 0.25 ETH | ||||
| Transfer | 24510475 | 19 mins ago | 0.25 ETH | ||||
| Transfer | 24510462 | 22 mins ago | 2.00001964 ETH | ||||
| Transfer | 24510414 | 31 mins ago | 0.265 ETH | ||||
| Transfer | 24510382 | 38 mins ago | 0.048 ETH | ||||
| Transfer | 24510349 | 44 mins ago | 0.25 ETH | ||||
| Transfer | 24510334 | 47 mins ago | 0.1 ETH | ||||
| Transfer | 24510327 | 49 mins ago | 0.13 ETH | ||||
| Transfer | 24510311 | 52 mins ago | 0.048 ETH | ||||
| Transfer | 24510302 | 54 mins ago | 0.04 ETH | ||||
| Transfer | 24510247 | 1 hr ago | 0.125 ETH | ||||
| Transfer | 24510239 | 1 hr ago | 0.25 ETH | ||||
| Transfer | 24510236 | 1 hr ago | 0.048 ETH | ||||
| Transfer | 24510203 | 1 hr ago | 13.15 ETH | ||||
| Transfer | 24510157 | 1 hr ago | 0.051 ETH | ||||
| Transfer | 24510120 | 1 hr ago | 0.067 ETH | ||||
| Transfer | 24510117 | 1 hr ago | 0.042 ETH | ||||
| Transfer | 24510092 | 1 hr ago | 0.53 ETH | ||||
| Transfer | 24509984 | 1 hr ago | 0.2 ETH | ||||
| Transfer | 24509974 | 1 hr ago | 0.1 ETH | ||||
| Transfer | 24509966 | 2 hrs ago | 0.069 ETH | ||||
| Transfer | 24509961 | 2 hrs ago | 0.05 ETH | ||||
| Transfer | 24509946 | 2 hrs ago | 0.049 ETH | ||||
| Transfer | 24509582 | 3 hrs ago | 0.04 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CoWSwapEthFlow
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
import "./libraries/EthFlowOrder.sol";
import "./interfaces/ICoWSwapSettlement.sol";
import "./interfaces/ICoWSwapEthFlow.sol";
import "./interfaces/IWrappedNativeToken.sol";
import "./mixins/CoWSwapOnchainOrders.sol";
import "./vendored/GPv2EIP1271.sol";
/// @title CoW Swap ETH Flow
/// @author CoW Swap Developers
contract CoWSwapEthFlow is
CoWSwapOnchainOrders,
EIP1271Verifier,
ICoWSwapEthFlow
{
using EthFlowOrder for EthFlowOrder.Data;
using GPv2Order for GPv2Order.Data;
using GPv2Order for bytes;
/// @dev The address of the CoW Swap settlement contract that will be used to settle orders created by this
/// contract.
ICoWSwapSettlement public immutable cowSwapSettlement;
/// @dev The address of the contract representing the default native token in the current chain (e.g., WETH for
/// Ethereum mainnet).
IWrappedNativeToken public immutable wrappedNativeToken;
/// @dev Each ETH flow order as described in [`EthFlowOrder.Data`] can be converted to a CoW Swap order. Distinct
/// CoW Swap orders have non-colliding order hashes. This mapping associates some extra data to a specific CoW Swap
/// order. This data is stored onchain and is used to verify the ownership and validity of an ETH flow order.
/// An ETH flow order can be settled onchain only if converting it to a CoW Swap order and hashing yields valid
/// onchain data.
mapping(bytes32 => EthFlowOrder.OnchainData) public orders;
/// @param _cowSwapSettlement The CoW Swap settlement contract.
/// @param _wrappedNativeToken The default native token in the current chain (e.g., WETH on mainnet).
constructor(
ICoWSwapSettlement _cowSwapSettlement,
IWrappedNativeToken _wrappedNativeToken
) CoWSwapOnchainOrders(address(_cowSwapSettlement)) {
cowSwapSettlement = _cowSwapSettlement;
wrappedNativeToken = _wrappedNativeToken;
_wrappedNativeToken.approve(
cowSwapSettlement.vaultRelayer(),
type(uint256).max
);
}
// The contract needs to be able to receive native tokens when unwrapping.
// solhint-disable-next-line no-empty-blocks
receive() external payable {}
/// @inheritdoc ICoWSwapEthFlow
function wrapAll() external {
wrap(address(this).balance);
}
/// @inheritdoc ICoWSwapEthFlow
function wrap(uint256 amount) public {
// The fallback implementation of the standard WETH9 contract just calls `deposit`. Using the fallback instead
// of directly calling `deposit` is slightly cheaper in terms of gas.
// solhint-disable-next-line avoid-low-level-calls
(bool success, ) = payable(address(wrappedNativeToken)).call{
value: amount
}("");
// The success value is intentionally disregarded. The callback of the standard WETH9 contract has no revert
// path in the code, so it could only revert if the internal call runs out of gas. This is not considered a
// security risk since a reverting internal call would just mean that calling this function has no effect.
success;
}
/// @inheritdoc ICoWSwapEthFlow
function unwrap(uint256 amount) external {
wrappedNativeToken.withdraw(amount);
}
/// @inheritdoc ICoWSwapEthFlow
function createOrder(EthFlowOrder.Data calldata order)
external
payable
returns (bytes32 orderHash)
{
if (msg.value != order.sellAmount + order.feeAmount) {
revert IncorrectEthAmount();
}
if (0 == order.sellAmount) {
revert NotAllowedZeroSellAmount();
}
// solhint-disable-next-line not-rely-on-time
if (order.validTo < block.timestamp) {
revert OrderIsAlreadyExpired();
}
EthFlowOrder.OnchainData memory onchainData = EthFlowOrder.OnchainData(
msg.sender,
order.validTo
);
OnchainSignature memory signature = OnchainSignature(
OnchainSigningScheme.Eip1271,
abi.encodePacked(address(this))
);
// The data event field includes extra information needed to settle orders with the CoW Swap API.
bytes memory data = abi.encodePacked(
order.quoteId,
onchainData.validTo
);
orderHash = broadcastOrder(
onchainData.owner,
order.toCoWSwapOrder(wrappedNativeToken),
signature,
data
);
if (orders[orderHash].owner != EthFlowOrder.NO_OWNER) {
revert OrderIsAlreadyOwned(orderHash);
}
orders[orderHash] = onchainData;
}
/// @inheritdoc ICoWSwapEthFlow
function invalidateOrdersIgnoringNotAllowed(
EthFlowOrder.Data[] calldata orderArray
) external {
for (uint256 i = 0; i < orderArray.length; i++) {
_invalidateOrder(orderArray[i], false);
}
}
/// @inheritdoc ICoWSwapEthFlow
function invalidateOrder(EthFlowOrder.Data calldata order) public {
_invalidateOrder(order, true);
}
/// @dev Performs the same tasks as `invalidateOrder` (see documentation in `ICoWSwapEthFlow`), but also allows the
/// caller to ignore the revert condition `NotAllowedToInvalidateOrder`. Instead of reverting, it stops execution
/// without causing any state change.
///
/// @param order order to be invalidated.
/// @param revertOnInvalidDeletion controls whether the function call should revert or just return.
function _invalidateOrder(
EthFlowOrder.Data calldata order,
bool revertOnInvalidDeletion
) internal {
GPv2Order.Data memory cowSwapOrder = order.toCoWSwapOrder(
wrappedNativeToken
);
bytes32 orderHash = cowSwapOrder.hash(cowSwapDomainSeparator);
EthFlowOrder.OnchainData memory orderData = orders[orderHash];
// solhint-disable-next-line not-rely-on-time
bool isTradable = orderData.validTo >= block.timestamp;
if (
orderData.owner == EthFlowOrder.INVALIDATED_OWNER ||
orderData.owner == EthFlowOrder.NO_OWNER ||
(isTradable && orderData.owner != msg.sender)
) {
if (revertOnInvalidDeletion) {
revert NotAllowedToInvalidateOrder(orderHash);
} else {
return;
}
}
orders[orderHash].owner = EthFlowOrder.INVALIDATED_OWNER;
bytes memory orderUid = new bytes(GPv2Order.UID_LENGTH);
orderUid.packOrderUidParams(
orderHash,
address(this),
cowSwapOrder.validTo
);
// solhint-disable-next-line not-rely-on-time
if (isTradable) {
// Order is valid but its owner decided to invalidate it.
emit OrderInvalidation(orderUid);
} else {
// The order cannot be traded anymore, so this transaction is likely triggered to get back the ETH. We are
// interested in knowing who is the source of the refund.
emit OrderRefund(orderUid, msg.sender);
}
uint256 filledAmount = cowSwapSettlement.filledAmount(orderUid);
// This comment argues that a CoW Swap trader does not pay more fees if a partially fillable order is
// (partially) settled in multiple batches rather than in one single batch of the combined size.
// This also means that we can refund the user assuming the worst case of settling the filled amount in a single
// batch without risking giving out more funds than available in the contract because of rounding issues.
// A CoW Swap trader is always charged exactly the amount of fees that is proportional to the filled amount
// rounded down to the smaller integer. The code is here:
// https://github.com/cowprotocol/contracts/blob/d4e0fcd58367907bf1aff54d182222eeaee793dd/src/contracts/GPv2Settlement.sol#L385-L387
// We show that a trader pays less in fee to CoW Swap when settiling a partially fillable order in two
// executions rather than a single one for the combined amount; by induction this proves our original statement.
// Our previous statement is equivalent to `floor(a/c) + floor(b/c) ≤ floor((a+b)/c)`. Writing a and b in terms
// of reminders (`a = ad*c+ar`, `b = bd*c+br`) the equation becomes `ad + bd ≤ ad + bd + floor((ar+br)/c)`,
// which is immediately true.
uint256 refundAmount;
unchecked {
// - Multiplication overflow: since this smart contract never invalidates orders on CoW Swap,
// `filledAmount <= sellAmount`. Also, `feeAmount + sellAmount` is an amount of native tokens that was
// originally sent by the user. As such, it cannot be larger than the amount of native tokens available,
// which is smaller than 2¹²⁸/10¹⁸ ≈ 10²⁰ in all networks supported by CoW Swap so far. Since both values
// are smaller than 2¹²⁸, their product does not overflow a uint256.
// - Subtraction underflow: again `filledAmount ≤ sellAmount`, meaning:
// feeAmount * filledAmount / sellAmount ≤ feeAmount
uint256 feeRefundAmount = cowSwapOrder.feeAmount -
((cowSwapOrder.feeAmount * filledAmount) /
cowSwapOrder.sellAmount);
// - Subtraction underflow: as noted before, filledAmount ≤ sellAmount.
// - Addition overflow: as noted before, the user already sent feeAmount + sellAmount native tokens, which
// did not overflow.
refundAmount =
cowSwapOrder.sellAmount -
filledAmount +
feeRefundAmount;
}
// If not enough native token is available in the contract, unwrap the needed amount.
if (address(this).balance < refundAmount) {
uint256 withdrawAmount;
unchecked {
withdrawAmount = refundAmount - address(this).balance;
}
wrappedNativeToken.withdraw(withdrawAmount);
}
// Using low level calls to perform the transfer avoids setting arbitrary limits to the amount of gas used in a
// call. Reentrancy is avoided thanks to the `nonReentrant` function modifier.
// solhint-disable-next-line avoid-low-level-calls
(bool success, ) = payable(orderData.owner).call{value: refundAmount}(
""
);
if (!success) {
revert EthTransferFailed();
}
}
/// @inheritdoc ICoWSwapEthFlow
function isValidSignature(bytes32 orderHash, bytes memory)
external
view
override(EIP1271Verifier, ICoWSwapEthFlow)
returns (bytes4)
{
// Note: the signature parameter is ignored since all information needed to verify the validity of the order is
// already available onchain.
EthFlowOrder.OnchainData memory orderData = orders[orderHash];
if (
(orderData.owner != EthFlowOrder.NO_OWNER) &&
(orderData.owner != EthFlowOrder.INVALIDATED_OWNER) &&
// solhint-disable-next-line not-rely-on-time
(orderData.validTo >= block.timestamp)
) {
return GPv2EIP1271.MAGICVALUE;
} else {
return bytes4(type(uint32).max);
}
}
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
import "../vendored/GPv2Order.sol";
import "../vendored/IERC20.sol";
/// @title CoW Swap ETH Flow Order Library
/// @author CoW Swap Developers
library EthFlowOrder {
/// @dev Struct collecting all parameters of an ETH flow order that need to be stored onchain.
struct OnchainData {
/// @dev The address of the user whom the order belongs to.
address owner;
/// @dev The latest timestamp in seconds when the order can be settled.
uint32 validTo;
}
/// @dev Data describing all parameters of an ETH flow order.
struct Data {
/// @dev The address of the token that should be bought for ETH. It follows the same format as in the CoW Swap
/// contracts, meaning that the token GPv2Transfer.BUY_ETH_ADDRESS (0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
/// represents native ETH (and should most likely not be used in this context).
IERC20 buyToken;
/// @dev The address that should receive the proceeds from the order. Note that using the address
/// GPv2Order.RECEIVER_SAME_AS_OWNER (i.e., the zero address) as the receiver is not allowed.
address receiver;
/// @dev The exact amount of ETH that should be sold in this order.
uint256 sellAmount;
/// @dev The minimum amount of buyToken that should be received to settle this order.
uint256 buyAmount;
/// @dev Extra data to include in the order. It is used by the CoW Swap infrastructure as extra information on
/// the order and has no direct effect on on-chain execution.
bytes32 appData;
/// @dev The exact amount of ETH that should be paid by the user to the CoW Swap contract after the order is
/// settled.
uint256 feeAmount;
/// @dev The last timestamp in seconds from which the order can be settled (order cannot resolve after this timestamp).
uint32 validTo;
/// @dev Flag indicating whether the order is fill-or-kill or can be filled partially.
bool partiallyFillable;
/// @dev quoteId The quote id obtained from the CoW Swap API to lock in the current price. It is not directly
/// used by any onchain component but is part of the information emitted onchain on order creation and may be
/// required for an order to be automatically picked up by the CoW Swap orderbook.
int64 quoteId;
}
/// @dev An order that is owned by this address is an order that has not yet been assigned.
address internal constant NO_OWNER = address(0);
/// @dev An order that is owned by this address is an order that has been invalidated. Note that this address cannot
/// be directly used to create orders.
address internal constant INVALIDATED_OWNER = address(type(uint160).max);
/// @dev Error returned if the receiver of the ETH flow order is unspecified (`GPv2Order.RECEIVER_SAME_AS_OWNER`).
error ReceiverMustBeSet();
/// @dev Transforms an ETH flow order into the CoW Swap order that can be settled by the ETH flow contract.
///
/// @param order The ETH flow order to be converted.
/// @param wrappedNativeToken The address of the wrapped native token for the current network (e.g., WETH for
/// Ethereum mainet).
/// @return The CoW Swap order data that represents the user order in the ETH flow contract.
function toCoWSwapOrder(Data memory order, IERC20 wrappedNativeToken)
internal
pure
returns (GPv2Order.Data memory)
{
if (order.receiver == GPv2Order.RECEIVER_SAME_AS_OWNER) {
// The receiver field specified which address is going to receive the proceeds from the orders. If using
// `RECEIVER_SAME_AS_OWNER`, then the receiver is implicitly assumed by the CoW Swap Protocol to be the
// same as the order owner.
// However, the owner of an ETH flow order is always the ETH flow smart contract, and any ERC20 tokens sent
// to this contract would be lost.
revert ReceiverMustBeSet();
}
// Note that not all fields from `order` are used in creating the corresponding CoW Swap order.
// For example, validTo and quoteId are ignored.
return
GPv2Order.Data(
wrappedNativeToken, // IERC20 sellToken
order.buyToken, // IERC20 buyToken
order.receiver, // address receiver
order.sellAmount, // uint256 sellAmount
order.buyAmount, // uint256 buyAmount
// This CoW Swap order is not allowed to expire. If it expired, then any solver of CoW Swap contract
// would be allowed to clear the `filledAmount` for this order using `freeFilledAmountStorage`, making
// it impossible to detect if the order has been previously filled.
// Note that order.validTo is disregarded in building the CoW Swap order.
type(uint32).max, // uint32 validTo
order.appData, // bytes32 appData
order.feeAmount, // uint256 feeAmount
// Only sell orders are allowed. In a buy order, any leftover ETH would stay in the ETH flow contract
// and would need to be sent back to the user, whose extra gas cost is usually not worth it.
GPv2Order.KIND_SELL, // bytes32 kind
order.partiallyFillable, // bool partiallyFillable
// We do not currently support interacting with the Balancer vault.
GPv2Order.BALANCE_ERC20, // bytes32 sellTokenBalance
GPv2Order.BALANCE_ERC20 // bytes32 buyTokenBalance
);
}
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
/// @title CoW Swap Settlement Contract Interface
/// @author CoW Swap Developers
/// @dev This interface collects the functions of the CoW Swap settlement contract that are used by the ETH flow
/// contract.
interface ICoWSwapSettlement {
/// @dev Map each user order by UID to the amount that has been filled so
/// far. If this amount is larger than or equal to the amount traded in the
/// order (amount sold for sell orders, amount bought for buy orders) then
/// the order cannot be traded anymore. If the order is fill or kill, then
/// this value is only used to determine whether the order has already been
/// executed.
/// @param orderUid The uinique identifier to use to retrieve the filled amount.
function filledAmount(bytes memory orderUid) external returns (uint256);
/// @dev The address of the vault relayer: the contract that handles withdrawing tokens from the user to the
/// settlement contract. A user who wants to sell a token on CoW Swap must approve this contract to spend the token.
function vaultRelayer() external returns (address);
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
import "../libraries/EthFlowOrder.sol";
/// @title CoW Swap ETH Flow Event Interface
/// @author CoW Swap Developers
interface ICoWSwapEthFlowEvents {
/// @dev Event emitted to notify that an order was refunded. Note that this event is not fired every time the order
/// is invalidated (even though the user receives all unspent ETH back). This is because we want to differenciate
/// the case where the user invalidates a valid order and when the user receives back the funds from an expired
/// order.
///
/// @param orderUid CoW Swap's unique order identifier of the order that has been invalidated (and refunded).
/// @param refunder The address that triggered the order refund.
event OrderRefund(bytes orderUid, address indexed refunder);
}
/// @title CoW Swap ETH Flow Interface
/// @author CoW Swap Developers
interface ICoWSwapEthFlow is ICoWSwapEthFlowEvents {
/// @dev Error thrown when trying to create a new order whose order hash is the same as an order hash that was
/// already assigned.
error OrderIsAlreadyOwned(bytes32 orderHash);
/// @dev Error thrown when trying to create an order that would be expired at the time of creation
error OrderIsAlreadyExpired();
/// @dev Error thrown when trying to create an order without sending the expected amount of ETH to this contract.
error IncorrectEthAmount();
/// @dev Error thrown when trying to create an order with a sell amount == 0
error NotAllowedZeroSellAmount();
/// @dev Error thrown if trying to invalidate an order while not allowed.
error NotAllowedToInvalidateOrder(bytes32 orderHash);
/// @dev Error thrown when unsuccessfully sending ETH to an address.
error EthTransferFailed();
/// @dev Function that creates and broadcasts an ETH flow order that sells native ETH. The order is paid for when
/// the caller sends out the transaction. The caller takes ownership of the new order.
///
/// @param order The data describing the order to be created. See [`EthFlowOrder.Data`] for extra information on
/// each parameter.
/// @return orderHash The hash of the CoW Swap order that is created to settle the new ETH order.
function createOrder(EthFlowOrder.Data calldata order)
external
payable
returns (bytes32 orderHash);
/// @dev Marks existing ETH-flow orders as invalid and, for each order, refunds the ETH that hasn't been traded yet.
/// The function call will not revert, if some orders are not refundable. It will silently ignore these orders.
/// Note that some parameters of the orders are ignored, as for example the order expiration date and the quote id.
///
/// @param orderArray Array of orders to be invalidated.
function invalidateOrdersIgnoringNotAllowed(
EthFlowOrder.Data[] calldata orderArray
) external;
/// @dev Marks an existing ETH-flow order as invalid and refunds the ETH that hasn't been traded yet.
/// Note that some parameters of the orders are ignored, as for example the order expiration date and the quote id.
///
/// @param order Order to be invalidated.
function invalidateOrder(EthFlowOrder.Data calldata order) external;
/// @dev EIP1271-compliant onchain signature verification function.
/// This function is used by the CoW Swap settlement contract to determine if an order that is signed with an
/// EIP1271 signature is valid. As this contract has approved the vault relayer contract, a valid signature for an
/// order means that the order can be traded on CoW Swap.
///
/// @param orderHash Hash of the order to be signed. This is the EIP-712 signing hash for the specified order as
/// defined in the CoW Swap settlement contract.
/// @param signature Signature byte array. This parameter is unused since as all information needed to verify if an
/// order is already available onchain.
/// @return magicValue Either the EIP-1271 "magic value" indicating success (0x1626ba7e) or a different value
/// indicating failure (0xffffffff).
function isValidSignature(bytes32 orderHash, bytes memory signature)
external
view
returns (bytes4 magicValue);
/// @dev This function reads the chain's native token balance of this contract (e.g., ETH for mainnet) and converts
// the entire amount to its wrapped version (e.g., WETH).
function wrapAll() external;
/// @dev This function takes the specified amount of the chain's native token (e.g., ETH for mainnet) stored by this
/// contract and converts it to its wrapped version (e.g., WETH).
///
/// @param amount The amount of native tokens to convert to wrapped native tokens.
function wrap(uint256 amount) external;
/// @dev This function takes the specified amount of the chain's wrapped native token (e.g., WETH for mainnet)
/// and converts it to its unwrapped version (e.g., ETH).
///
/// @param amount The amount of wrapped native tokens to convert to native tokens.
function unwrap(uint256 amount) external;
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
import "../vendored/IERC20.sol";
/// @title CoW Swap Wrapped Native Token Interface
/// @author CoW Swap Developers
interface IWrappedNativeToken is IERC20 {
/// @dev Deposit native token in exchange for wrapped netive tokens.
function deposit() external payable;
/// @dev Burn wrapped native tokens in exchange for native tokens.
/// @param amount Amount of wrapped tokens to exchange for native tokens.
function withdraw(uint256 amount) external;
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
import "../vendored/GPv2Order.sol";
import "../interfaces/ICoWSwapOnchainOrders.sol";
import "../libraries/CoWSwapEip712.sol";
/// @title CoW Swap Onchain Order Creator Event Emitter
/// @author CoW Swap Developers
contract CoWSwapOnchainOrders is ICoWSwapOnchainOrders {
using GPv2Order for GPv2Order.Data;
using GPv2Order for bytes;
/// @dev The domain separator for the CoW Swap settlement contract.
bytes32 internal immutable cowSwapDomainSeparator;
/// @param settlementContractAddress The address of CoW Swap's settlement contract on the chain where this contract
/// is deployed.
constructor(address settlementContractAddress) {
cowSwapDomainSeparator = CoWSwapEip712.domainSeparator(
settlementContractAddress
);
}
/// @dev Emits an event with all information needed to execute an order onchain and returns the corresponding order
/// hash.
///
/// See [`ICoWSwapOnchainOrders.OrderPlacement`] for details on the meaning of each parameter.
/// @return The EIP-712 hash of the order data as computed by the CoW Swap settlement contract.
function broadcastOrder(
address sender,
GPv2Order.Data memory order,
OnchainSignature memory signature,
bytes memory data
) internal returns (bytes32) {
emit OrderPlacement(sender, order, signature, data);
return order.hash(cowSwapDomainSeparator);
}
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
// Vendored from GPv2 contracts v1.0.0, see:
// <https://raw.githubusercontent.com/cowprotocol/contracts/main/src/contracts/interfaces/GPv2EIP1271.sol>
// The following changes were made:
// - Bumped up Solidity version.
library GPv2EIP1271 {
/// @dev Value returned by a call to `isValidSignature` if the signature
/// was verified successfully. The value is defined in EIP-1271 as:
/// bytes4(keccak256("isValidSignature(bytes32,bytes)"))
bytes4 internal constant MAGICVALUE = 0x1626ba7e;
}
/// @title EIP1271 Interface
/// @dev Standardized interface for an implementation of smart contract
/// signatures as described in EIP-1271. The code that follows is identical to
/// the code in the standard with the exception of formatting and syntax
/// changes to adapt the code to our Solidity version.
interface EIP1271Verifier {
/// @dev Should return whether the signature provided is valid for the
/// provided data
/// @param _hash Hash of the data to be signed
/// @param _signature Signature byte array associated with _data
///
/// MUST return the bytes4 magic value 0x1626ba7e when function passes.
/// MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for
/// solc > 0.5)
/// MUST allow external calls
///
function isValidSignature(bytes32 _hash, bytes memory _signature)
external
view
returns (bytes4 magicValue);
}// SPDX-License-Identifier: LGPL-3.0-or-later
// Vendored from GPv2 contracts v1.0.0, see:
// <https://raw.githubusercontent.com/cowprotocol/contracts/v1.0.0/src/contracts/libraries/GPv2Order.sol>
// The following changes were made:
// - Bumped up Solidity version.
// - Vendored imports.
pragma solidity ^0.8;
import "./IERC20.sol";
/// @title Gnosis Protocol v2 Order Library
/// @author Gnosis Developers
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 {
IERC20 sellToken;
IERC20 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.8.16/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)))
}
}
}// SPDX-License-Identifier: MIT
// Vendored from OpenZeppelin Contracts v4.4.0, see:
// <https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.4.0/contracts/token/ERC20/IERC20.sol>
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount)
external
returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
import "../vendored/GPv2Order.sol";
/// @title CoW Swap Onchain Order Creator Interface
/// @author CoW Swap Developers
interface ICoWSwapOnchainOrders {
/// @dev List of signature schemes that are supported by this contract to create orders onchain.
enum OnchainSigningScheme {
Eip1271,
PreSign
}
/// @dev Struct containing information on the signign scheme used plus the corresponding signature.
struct OnchainSignature {
/// @dev The signing scheme used by the signature data.
OnchainSigningScheme scheme;
/// @dev The data used as an order signature.
bytes data;
}
/// @dev Event emitted to broadcast an order onchain.
///
/// @param sender The user who triggered the creation of the order. Note that this address does *not* need to be
/// the actual owner of the order and does not need to be related to the order or signature in any way.
/// For example, if a smart contract creates orders on behalf of the user, then the sender would be the user who
/// triggers the creation of the order, while the actual owner of the order would be the smart contract that
/// creates it.
/// @param order Information on the order that is created in this transacion. The order is expected to be a valid
/// order for the CoW Swap settlement contract and contain all information needed to settle it in a batch.
/// @param signature The signature that can be used to verify the newly created order. Note that it is always
/// possible to recover the owner of the order from a valid signature.
/// @param data Any extra data that should be passed along with the order. This will be used by the services that
/// collects onchain orders and no specific encoding is enforced on this field. It is supposed to encode extra
/// information that is not included in the order data so that it can be passed along when decoding an onchain
/// order. As an example, a contract that creates orders on behalf of a user could set a different expiration date
/// than the one specified in the order.
event OrderPlacement(
address indexed sender,
GPv2Order.Data order,
OnchainSignature signature,
bytes data
);
/// @dev Event emitted to notify that an order was invalidated.
///
/// @param orderUid CoW Swap's unique order identifier of the order that has been invalidated.
event OrderInvalidation(bytes orderUid);
}// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.8;
/// @title CoW Swap EIP-712 Encoding Library
/// @author CoW Swap Developers
/// @dev The code in this contract was largely taken from:
/// <https://raw.githubusercontent.com/cowprotocol/contracts/v1.0.0/src/contracts/mixins/GPv2Signing.sol>
library CoWSwapEip712 {
/// @dev The EIP-712 domain type hash used for computing the domain separator.
bytes32 private constant DOMAIN_TYPE_HASH =
keccak256(
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
);
/// @dev The EIP-712 domain name used for computing the domain separator.
bytes32 private constant DOMAIN_NAME = keccak256("Gnosis Protocol");
/// @dev The EIP-712 domain version used for computing the domain separator.
bytes32 private constant DOMAIN_VERSION = keccak256("v2");
/// @dev Computes the EIP-712 domain separator of the CoW Swap settlement contract on the current network.
///
/// @param cowSwapAddress The address of the CoW Swap settlement contract for which to compute the domain separator.
/// Note that there are no checks to verify that the input address points to an actual contract.
/// @return The domain separator of the settlement contract for the input address as computed by the settlement
/// contract internally.
function domainSeparator(address cowSwapAddress)
internal
view
returns (bytes32)
{
// NOTE: Currently, the only way to get the chain ID in solidity is using assembly.
uint256 chainId;
// solhint-disable-next-line no-inline-assembly
assembly {
chainId := chainid()
}
return
keccak256(
abi.encode(
DOMAIN_TYPE_HASH,
DOMAIN_NAME,
DOMAIN_VERSION,
chainId,
cowSwapAddress
)
);
}
}{
"remappings": [
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 1000000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ICoWSwapSettlement","name":"_cowSwapSettlement","type":"address"},{"internalType":"contract IWrappedNativeToken","name":"_wrappedNativeToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EthTransferFailed","type":"error"},{"inputs":[],"name":"IncorrectEthAmount","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"NotAllowedToInvalidateOrder","type":"error"},{"inputs":[],"name":"NotAllowedZeroSellAmount","type":"error"},{"inputs":[],"name":"OrderIsAlreadyExpired","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsAlreadyOwned","type":"error"},{"inputs":[],"name":"ReceiverMustBeSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"orderUid","type":"bytes"}],"name":"OrderInvalidation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","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":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"indexed":false,"internalType":"struct GPv2Order.Data","name":"order","type":"tuple"},{"components":[{"internalType":"enum ICoWSwapOnchainOrders.OnchainSigningScheme","name":"scheme","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false,"internalType":"struct ICoWSwapOnchainOrders.OnchainSignature","name":"signature","type":"tuple"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"OrderPlacement","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"orderUid","type":"bytes"},{"indexed":true,"internalType":"address","name":"refunder","type":"address"}],"name":"OrderRefund","type":"event"},{"inputs":[],"name":"cowSwapSettlement","outputs":[{"internalType":"contract ICoWSwapSettlement","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"int64","name":"quoteId","type":"int64"}],"internalType":"struct EthFlowOrder.Data","name":"order","type":"tuple"}],"name":"createOrder","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"int64","name":"quoteId","type":"int64"}],"internalType":"struct EthFlowOrder.Data","name":"order","type":"tuple"}],"name":"invalidateOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"int64","name":"quoteId","type":"int64"}],"internalType":"struct EthFlowOrder.Data[]","name":"orderArray","type":"tuple[]"}],"name":"invalidateOrdersIgnoringNotAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orders","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint32","name":"validTo","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedNativeToken","outputs":[{"internalType":"contract IWrappedNativeToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e06040523480156200001157600080fd5b5060405162001b2a38038062001b2a83398101604081905262000034916200021e565b816200004b816200015260201b6200089b1760201c565b608052506001600160a01b0380831660a081905290821660c081905260408051634daa966160e11b81529051919263095ea7b3929091639b552cc291600480830192602092919082900301816000875af1158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200025d565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af115801562000123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000149919062000284565b505050620002a8565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf606082015246608082018190526001600160a01b03831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b6001600160a01b03811681146200021b57600080fd5b50565b600080604083850312156200023257600080fd5b82516200023f8162000205565b6020840151909250620002528162000205565b809150509250929050565b6000602082840312156200027057600080fd5b81516200027d8162000205565b9392505050565b6000602082840312156200029757600080fd5b815180151581146200027d57600080fd5b60805160a05160c0516118216200030960003960008181610129015281816105ff015281816107ad0152818161082501528181610c3301526110310152600081816102ce0152610f4b015260008181610bf70152610cd901526118216000f3fe6080604052600436106100b55760003560e01c80637bc41b9611610069578063de0e9a3e1161004e578063de0e9a3e1461027c578063ea598cb01461029c578063ec30bb88146102bc57600080fd5b80637bc41b96146101c85780639c3f1e90146101e857600080fd5b8063322bba211161009a578063322bba21146101705780634c84c1c8146101915780634cb76498146101a857600080fd5b80631626ba7e146100c157806317fcb39b1461011757600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc36600461126e565b6102f0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561012357600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b61018361017e36600461132b565b6103de565b60405190815260200161010e565b34801561019d57600080fd5b506101a6610720565b005b3480156101b457600080fd5b506101a66101c3366004611344565b61072b565b3480156101d457600080fd5b506101a66101e336600461132b565b610770565b3480156101f457600080fd5b5061024b6102033660046113ba565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835263ffffffff90911660208301520161010e565b34801561028857600080fd5b506101a66102973660046113ba565b61077e565b3480156102a857600080fd5b506101a66102b73660046113ba565b610821565b3480156102c857600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60008281526020818152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910463ffffffff1692820192909252901580159061036f5750805173ffffffffffffffffffffffffffffffffffffffff90811614155b8015610385575042816020015163ffffffff1610155b156103b357507f1626ba7e0000000000000000000000000000000000000000000000000000000090506103d8565b507fffffffff0000000000000000000000000000000000000000000000000000000090505b92915050565b60006103f260a08301356040840135611402565b341461042a576040517f8b6ebb4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160400135600003610468576040517feaec5c9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4261047960e0840160c0850161142e565b63ffffffff1610156104b7576040517f89bb260100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152338152600090602081016104db60e0860160c0870161142e565b63ffffffff169052604080518082019091529091506000908082815260200130604051602001610536919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529050600061057c61012086016101008701611462565b6020808501516040516105c393920160c09290921b825260e01b7fffffffff00000000000000000000000000000000000000000000000000000000166008820152600c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052835190915061063a906106337f000000000000000000000000000000000000000000000000000000000000000061062d368a90038a018a6114b1565b9061095b565b8484610b2a565b60008181526020819052604090205490945073ffffffffffffffffffffffffffffffffffffffff16156106a1576040517f56a1d2b2000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b505060008281526020818152604090912082518154929093015163ffffffff1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff90931692909217179055919050565b61072947610821565b565b60005b8181101561076b5761075983838381811061074b5761074b61154b565b905061012002016000610c2c565b806107638161157a565b91505061072e565b505050565b61077b816001610c2c565b50565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561080657600080fd5b505af115801561081a573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461081a576040519150601f19603f3d011682016040523d82523d6000602084013e61081a565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf6060820152466080820181905273ffffffffffffffffffffffffffffffffffffffff831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b604080516101808101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201529083015173ffffffffffffffffffffffffffffffffffffffff16610a0a576040517fefc9ccdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061018001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015181526020018460600151815260200163ffffffff80168152602001846080015181526020018460a0015181526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020018460e00151151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9815250905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff167fcf5f9de2984132265203b5c335b25727702ca77262ff622e136baa7362bf1da9858585604051610b7693929190611676565b60405180910390a25050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006002820152602281019190915260429020919050565b6000610c617f000000000000000000000000000000000000000000000000000000000000000061062d368690038601866114b1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a082209152604080517f190100000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600282015260228101929092526042909120600081815260208181529083902083518085019094525473ffffffffffffffffffffffffffffffffffffffff8082168086527401000000000000000000000000000000000000000090920463ffffffff1692850183905294955091934290911015911480610d8d5750815173ffffffffffffffffffffffffffffffffffffffff16155b80610db75750808015610db75750815173ffffffffffffffffffffffffffffffffffffffff163314155b15610dff578415610df7576040517ff8cc70ce00000000000000000000000000000000000000000000000000000000815260048101849052602401610698565b505050505050565b60008381526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff1790558051603880825260608201909252918201818036833750505060a0860151909150610e7a90829086903090611149565b8115610ebc577fb8bad102ac8bbacfef31ff1c906ec6d951c230b4dce750bb0376b812ad35852a81604051610eaf9190611790565b60405180910390a1610f0b565b3373ffffffffffffffffffffffffffffffffffffffff167f195271068a288191e4b265c641a56b9832919f69e9e7d6c2f31ba40278aeb85a82604051610f029190611790565b60405180910390a25b6040517f2479fb6e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632479fb6e90610f80908590600401611790565b6020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc391906117a3565b90506000808760600151838960e001510281610fe157610fe16117bc565b048860e00151039050808389606001510301915050804710156110a4576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815247820360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50505050505b845160405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061113d576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b60388451146111b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a2075696420627566666572206f766572666c6f77000000000000006044820152606401610698565b60388401526034830152602090910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715611219576112196111c6565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611266576112666111c6565b604052919050565b6000806040838503121561128157600080fd5b8235915060208084013567ffffffffffffffff808211156112a157600080fd5b818601915086601f8301126112b557600080fd5b8135818111156112c7576112c76111c6565b6112f7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161121f565b9150808252878482850101111561130d57600080fd5b80848401858401376000848284010152508093505050509250929050565b6000610120828403121561133e57600080fd5b50919050565b6000806020838503121561135757600080fd5b823567ffffffffffffffff8082111561136f57600080fd5b818501915085601f83011261138357600080fd5b81358181111561139257600080fd5b866020610120830285010111156113a857600080fd5b60209290920196919550909350505050565b6000602082840312156113cc57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103d8576103d86113d3565b803563ffffffff8116811461142957600080fd5b919050565b60006020828403121561144057600080fd5b61144982611415565b9392505050565b8035600781900b811461142957600080fd5b60006020828403121561147457600080fd5b61144982611450565b803573ffffffffffffffffffffffffffffffffffffffff8116811461142957600080fd5b8035801515811461142957600080fd5b600061012082840312156114c457600080fd5b6114cc6111f5565b6114d58361147d565b81526114e36020840161147d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261151c60c08401611415565b60c082015261152d60e084016114a1565b60e0820152610100611540818501611450565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115ab576115ab6113d3565b5060010190565b6000815180845260005b818110156115d8576020818501810151868301820152016115bc565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000815160028110611651577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8084525060208201516040602085015261166e60408501826115b2565b949350505050565b835173ffffffffffffffffffffffffffffffffffffffff16815260006101c060208601516116bc602085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408601516116e4604085018273ffffffffffffffffffffffffffffffffffffffff169052565b50606086015160608401526080860151608084015260a086015161171060a085018263ffffffff169052565b5060c086015160c084015260e086015160e0840152610100808701518185015250610120808701516117458286018215159052565b505061014086810151908401526101608087015190840152610180830181905261177181840186611616565b90508281036101a084015261178681856115b2565b9695505050505050565b60208152600061144960208301846115b2565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220ef8802913dc7f390c98427b120eee077bb04d92ea672807f56839d2e432db81764736f6c634300081000330000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106100b55760003560e01c80637bc41b9611610069578063de0e9a3e1161004e578063de0e9a3e1461027c578063ea598cb01461029c578063ec30bb88146102bc57600080fd5b80637bc41b96146101c85780639c3f1e90146101e857600080fd5b8063322bba211161009a578063322bba21146101705780634c84c1c8146101915780634cb76498146101a857600080fd5b80631626ba7e146100c157806317fcb39b1461011757600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc36600461126e565b6102f0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561012357600080fd5b5061014b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b61018361017e36600461132b565b6103de565b60405190815260200161010e565b34801561019d57600080fd5b506101a6610720565b005b3480156101b457600080fd5b506101a66101c3366004611344565b61072b565b3480156101d457600080fd5b506101a66101e336600461132b565b610770565b3480156101f457600080fd5b5061024b6102033660046113ba565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835263ffffffff90911660208301520161010e565b34801561028857600080fd5b506101a66102973660046113ba565b61077e565b3480156102a857600080fd5b506101a66102b73660046113ba565b610821565b3480156102c857600080fd5b5061014b7f0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab4181565b60008281526020818152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910463ffffffff1692820192909252901580159061036f5750805173ffffffffffffffffffffffffffffffffffffffff90811614155b8015610385575042816020015163ffffffff1610155b156103b357507f1626ba7e0000000000000000000000000000000000000000000000000000000090506103d8565b507fffffffff0000000000000000000000000000000000000000000000000000000090505b92915050565b60006103f260a08301356040840135611402565b341461042a576040517f8b6ebb4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160400135600003610468576040517feaec5c9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4261047960e0840160c0850161142e565b63ffffffff1610156104b7576040517f89bb260100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152338152600090602081016104db60e0860160c0870161142e565b63ffffffff169052604080518082019091529091506000908082815260200130604051602001610536919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529050600061057c61012086016101008701611462565b6020808501516040516105c393920160c09290921b825260e01b7fffffffff00000000000000000000000000000000000000000000000000000000166008820152600c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052835190915061063a906106337f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261062d368a90038a018a6114b1565b9061095b565b8484610b2a565b60008181526020819052604090205490945073ffffffffffffffffffffffffffffffffffffffff16156106a1576040517f56a1d2b2000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b505060008281526020818152604090912082518154929093015163ffffffff1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff90931692909217179055919050565b61072947610821565b565b60005b8181101561076b5761075983838381811061074b5761074b61154b565b905061012002016000610c2c565b806107638161157a565b91505061072e565b505050565b61077b816001610c2c565b50565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561080657600080fd5b505af115801561081a573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461081a576040519150601f19603f3d011682016040523d82523d6000602084013e61081a565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf6060820152466080820181905273ffffffffffffffffffffffffffffffffffffffff831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b604080516101808101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201529083015173ffffffffffffffffffffffffffffffffffffffff16610a0a576040517fefc9ccdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061018001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015181526020018460600151815260200163ffffffff80168152602001846080015181526020018460a0015181526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020018460e00151151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9815250905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff167fcf5f9de2984132265203b5c335b25727702ca77262ff622e136baa7362bf1da9858585604051610b7693929190611676565b60405180910390a25050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527fc078f884a2676e1345748b1feace7b0abee5d00ecadb6e574dcdd109a63e89436002820152602281019190915260429020919050565b6000610c617f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261062d368690038601866114b1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a082209152604080517f190100000000000000000000000000000000000000000000000000000000000081527fc078f884a2676e1345748b1feace7b0abee5d00ecadb6e574dcdd109a63e8943600282015260228101929092526042909120600081815260208181529083902083518085019094525473ffffffffffffffffffffffffffffffffffffffff8082168086527401000000000000000000000000000000000000000090920463ffffffff1692850183905294955091934290911015911480610d8d5750815173ffffffffffffffffffffffffffffffffffffffff16155b80610db75750808015610db75750815173ffffffffffffffffffffffffffffffffffffffff163314155b15610dff578415610df7576040517ff8cc70ce00000000000000000000000000000000000000000000000000000000815260048101849052602401610698565b505050505050565b60008381526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff1790558051603880825260608201909252918201818036833750505060a0860151909150610e7a90829086903090611149565b8115610ebc577fb8bad102ac8bbacfef31ff1c906ec6d951c230b4dce750bb0376b812ad35852a81604051610eaf9190611790565b60405180910390a1610f0b565b3373ffffffffffffffffffffffffffffffffffffffff167f195271068a288191e4b265c641a56b9832919f69e9e7d6c2f31ba40278aeb85a82604051610f029190611790565b60405180910390a25b6040517f2479fb6e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab411690632479fb6e90610f80908590600401611790565b6020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc391906117a3565b90506000808760600151838960e001510281610fe157610fe16117bc565b048860e00151039050808389606001510301915050804710156110a4576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815247820360048201819052907f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50505050505b845160405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061113d576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b60388451146111b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a2075696420627566666572206f766572666c6f77000000000000006044820152606401610698565b60388401526034830152602090910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715611219576112196111c6565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611266576112666111c6565b604052919050565b6000806040838503121561128157600080fd5b8235915060208084013567ffffffffffffffff808211156112a157600080fd5b818601915086601f8301126112b557600080fd5b8135818111156112c7576112c76111c6565b6112f7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161121f565b9150808252878482850101111561130d57600080fd5b80848401858401376000848284010152508093505050509250929050565b6000610120828403121561133e57600080fd5b50919050565b6000806020838503121561135757600080fd5b823567ffffffffffffffff8082111561136f57600080fd5b818501915085601f83011261138357600080fd5b81358181111561139257600080fd5b866020610120830285010111156113a857600080fd5b60209290920196919550909350505050565b6000602082840312156113cc57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103d8576103d86113d3565b803563ffffffff8116811461142957600080fd5b919050565b60006020828403121561144057600080fd5b61144982611415565b9392505050565b8035600781900b811461142957600080fd5b60006020828403121561147457600080fd5b61144982611450565b803573ffffffffffffffffffffffffffffffffffffffff8116811461142957600080fd5b8035801515811461142957600080fd5b600061012082840312156114c457600080fd5b6114cc6111f5565b6114d58361147d565b81526114e36020840161147d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261151c60c08401611415565b60c082015261152d60e084016114a1565b60e0820152610100611540818501611450565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115ab576115ab6113d3565b5060010190565b6000815180845260005b818110156115d8576020818501810151868301820152016115bc565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000815160028110611651577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8084525060208201516040602085015261166e60408501826115b2565b949350505050565b835173ffffffffffffffffffffffffffffffffffffffff16815260006101c060208601516116bc602085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408601516116e4604085018273ffffffffffffffffffffffffffffffffffffffff169052565b50606086015160608401526080860151608084015260a086015161171060a085018263ffffffff169052565b5060c086015160c084015260e086015160e0840152610100808701518185015250610120808701516117458286018215159052565b505061014086810151908401526101608087015190840152610180830181905261177181840186611616565b90508281036101a084015261178681856115b2565b9695505050505050565b60208152600061144960208301846115b2565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220ef8802913dc7f390c98427b120eee077bb04d92ea672807f56839d2e432db81764736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _cowSwapSettlement (address): 0x9008D19f58AAbD9eD0D60971565AA8510560ab41
Arg [1] : _wrappedNativeToken (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
387:11161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10767:779;;;;;;;;;;-1:-1:-1;10767:779:0;;;;;:::i;:::-;;:::i;:::-;;;1868:66:11;1856:79;;;1838:98;;1826:2;1811:18;10767:779:0;;;;;;;;938:55;;;;;;;;;;;;;;;;;;2303:42:11;2291:55;;;2273:74;;2261:2;2246:18;938:55:0;2100:253:11;3395:1366:0;;;;;;:::i;:::-;;:::i;:::-;;;2699:25:11;;;2687:2;2672:18;3395:1366:0;2553:177:11;2328:72:0;;;;;;;;;;;;;:::i;:::-;;4803:235;;;;;;;;;;-1:-1:-1;4803:235:0;;;;;:::i;:::-;;:::i;5080:112::-;;;;;;;;;;-1:-1:-1;5080:112:0;;;;;:::i;:::-;;:::i;1490:58::-;;;;;;;;;;-1:-1:-1;1490:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3869:42:11;3857:55;;;3839:74;;3961:10;3949:23;;;3944:2;3929:18;;3922:51;3812:18;1490:58:0;3667:312:11;3260:93:0;;;;;;;;;;-1:-1:-1;3260:93:0;;;;;:::i;:::-;;:::i;2442:776::-;;;;;;;;;;-1:-1:-1;2442:776:0;;;;;:::i;:::-;;:::i;735:53::-;;;;;;;;;;;;;;;10767:779;10924:6;11148:17;;;;;;;;;;;11104:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11193:40;;;;11192:109;;-1:-1:-1;11251:15:0;;2845:17:6;11251:49:0;;;;;11192:109;:221;;;;;11397:15;11376:9;:17;;;:36;;;;11192:221;11175:365;;;-1:-1:-1;11445:22:0;;-1:-1:-1;11438:29:0;;11175:365;-1:-1:-1;11505:24:0;;-1:-1:-1;10767:779:0;;;;;:::o;3395:1366::-;3500:17;3550:34;3569:15;;;;3550:16;;;;:34;:::i;:::-;3537:9;:47;3533:105;;3607:20;;;;;;;;;;;;;;3533:105;3657:5;:16;;;3652:1;:21;3648:85;;3696:26;;;;;;;;;;;;;;3648:85;3817:15;3801:13;;;;;;;;:::i;:::-;:31;;;3797:92;;;3855:23;;;;;;;;;;;;;;3797:92;3945:85;;;;;;;;;3983:10;3945:85;;3899:43;;3945:85;;;4007:13;;;;;;;;:::i;:::-;3945:85;;;;4077:113;;;;;;;;;3899:131;;-1:-1:-1;4041:33:0;;4077:113;4041:33;4077:113;;;;4174:4;4149:31;;;;;;;5440:2:11;5436:15;;;;5453:66;5432:88;5420:101;;5546:2;5537:12;;5291:264;4149:31:0;;;;;;;;;;;;;;4077:113;;4041:149;-1:-1:-1;4307:17:0;4357:13;;;;;;;;:::i;:::-;4384:19;;;;;4327:86;;;;;;6079:3:11;6075:16;;;;6063:29;;6129:3;6125:16;6143:66;6121:89;6117:1;6108:11;;6101:110;6236:2;6227:12;;5912:333;4327:86:0;;;;;;;;;;;;;;4464:17;;4327:86;;-1:-1:-1;4436:150:0;;4495:40;4516:18;4495:20;;;;;;;:5;:20;:::i;:::-;;;:40::i;:::-;4549:9;4572:4;4436:14;:150::i;:::-;2618:1:6;4601:17:0;;;;;;;;;;:23;4424:162;;-1:-1:-1;4601:48:0;:23;:48;4597:116;;4672:30;;;;;;;;2699:25:11;;;2672:18;;4672:30:0;;;;;;;;4597:116;-1:-1:-1;;4723:6:0;:17;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;4730:9;3395:1366;-1:-1:-1;3395:1366:0:o;2328:72::-;2366:27;2371:21;2366:4;:27::i;:::-;2328:72::o;4803:235::-;4926:9;4921:111;4941:21;;;4921:111;;;4983:38;5000:10;;5011:1;5000:13;;;;;;;:::i;:::-;;;;;;5015:5;4983:16;:38::i;:::-;4964:3;;;;:::i;:::-;;;;4921:111;;;;4803:235;;:::o;5080:112::-;5156:29;5173:5;5180:4;5156:16;:29::i;:::-;5080:112;:::o;3260:93::-;3311:35;;;;;;;;2699:25:11;;;3311:18:0;:27;;;;;2672:18:11;;3311:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3260:93;:::o;2442:776::-;2746:12;2780:18;2764:41;;2826:6;2764:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1381:622:5;1782:200;;;474:117;1782:200;;;8534:25:11;715:28:5;8575:18:11;;;8568:34;;;;873:15:5;8618:18:11;;;8611:34;1707:9:5;8661:18:11;;;8654:34;;;8737:42;8725:55;;8704:19;;;8697:84;1477:7:5;;8506:19:11;;1782:200:5;;;;;;;;;;;;1755:241;;;;;;1736:260;;;1381:622;;;:::o;3435:2329:6:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3593:14:6;;;;:50;;3589:547;;4106:19;;;;;;;;;;;;;;3589:547;4326:1431;;;;;;;;4358:18;4326:1431;;;;;;4414:5;:14;;;4326:1431;;;;;;4465:5;:14;;;4326:1431;;;;;;4517:5;:16;;;4326:1431;;;;4573:5;:15;;;4326:1431;;;;5037:16;4326:1431;;;;;;5089:5;:13;;;4326:1431;;;;5139:5;:15;;;4326:1431;;;;5420:19;4326:1431;;;;5473:5;:23;;;4326:1431;;;;;;5624:23;4326:1431;;;;5693:23;4326:1431;;;4307:1450;;3435:2329;;;;:::o;1201:307:7:-;1380:7;1419:6;1404:46;;;1427:5;1434:9;1445:4;1404:46;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;5634:14:9;;5673:16;;5720:9;5702:28;;5778:3;5757:25;;5795:23;;6377:4;6371:11;6421:10;6395:37;;1478:22:7;6475:1:9;6452:25;;6445:50;6538:2;6515:26;;6508:46;;;;6611:2;6582:32;;;1460:41:7;-1:-1:-1;1201:307:7:o;5636:5089:0:-;5767:34;5804:62;5838:18;5804:20;;;;;;;:5;:20;:::i;:62::-;5634:14:9;;;5673:16;;5720:9;5702:28;;5778:3;5757:25;;5795:23;;6377:4;6371:11;;6421:10;6395:37;;5914:22:0;6475:1:9;6452:25;;6445:50;6538:2;6515:26;;6508:46;;;;6611:2;6582:32;;;-1:-1:-1;5992:17:0;;;-1:-1:-1;5992:17:0;;;;;;;5948:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;5634:14:9;;-1:-1:-1;6582:32:9;;6113:15:0;6092:36;;;;;6155:49;;:105;;-1:-1:-1;6220:15:0;;:40;;;6155:105;:166;;;;6277:10;:43;;;;-1:-1:-1;6291:15:0;;:29;;6310:10;6291:29;;6277:43;6138:370;;;6350:23;6346:152;;;6400:38;;;;;;;;2699:25:11;;;2672:18;;6400:38:0;2553:177:11;6346:152:0;6477:7;;;;5636:5089;;:::o;6346:152::-;6518:6;:17;;;;;;;;;;;:56;;;;2845:17:6;6518:56:0;;;6609:31;;4189:2:9;6609:31:0;;;;;;;;;;;;4189:2:9;;6609:31:0;;;-1:-1:-1;;;6741:20:0;;;;6585:55;;-1:-1:-1;6650:121:0;;6585:55;;6691:9;;6722:4;;6650:27;:121::i;:::-;6840:10;6836:401;;;6941:27;6959:8;6941:27;;;;;;:::i;:::-;;;;;;;;6836:401;;;7215:10;7193:33;;;7205:8;7193:33;;;;;;:::i;:::-;;;;;;;;6836:401;7270:40;;;;;7247:20;;7270:30;:17;:30;;;;:40;;7301:8;;7270:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7247:63;;8604:20;9375:23;9505:12;:23;;;9469:12;9444;:22;;;:37;9443:85;;;;;:::i;:::-;;9401:12;:22;;;:128;9375:154;;9888:15;9857:12;9815;:23;;;:54;:88;9784:119;;8634:1280;10046:12;10022:21;:36;10018:255;;;10219:43;;;;;10170:21;10155:36;;10219:43;;;2699:25:11;;;10155:36:0;10219:18;:27;;;;;2672:18:11;;10219:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10060:213;10018:255;10576:15;;10568:76;;10550:12;;10568:29;;;10605:12;;10550;10568:76;10550:12;10568:76;10605:12;10568:29;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10549:95;;;10659:7;10654:65;;10689:19;;;;;;;;;;;;;;10654:65;5757:4968;;;;;;;;5636:5089;;:::o;7270:1736:9:-;4189:2;7443:8;:15;:29;7435:67;;;;;;;12331:2:11;7435:67:9;;;12313:21:11;12370:2;12350:18;;;12343:30;12409:27;12389:18;;;12382:55;12454:18;;7435:67:9;12129:349:11;7435:67:9;8881:2;8867:17;;8860:34;8928:2;8914:17;;8907:32;8973:2;8959:17;;;8952:38;7270:1736::o;14:184:11:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:252;275:2;269:9;317:3;305:16;;351:18;336:34;;372:22;;;333:62;330:88;;;398:18;;:::i;:::-;434:2;427:22;203:252;:::o;460:334::-;531:2;525:9;587:2;577:13;;592:66;573:86;561:99;;690:18;675:34;;711:22;;;672:62;669:88;;;737:18;;:::i;:::-;773:2;766:22;460:334;;-1:-1:-1;460:334:11:o;799:890::-;876:6;884;937:2;925:9;916:7;912:23;908:32;905:52;;;953:1;950;943:12;905:52;989:9;976:23;966:33;;1018:2;1071;1060:9;1056:18;1043:32;1094:18;1135:2;1127:6;1124:14;1121:34;;;1151:1;1148;1141:12;1121:34;1189:6;1178:9;1174:22;1164:32;;1234:7;1227:4;1223:2;1219:13;1215:27;1205:55;;1256:1;1253;1246:12;1205:55;1292:2;1279:16;1314:2;1310;1307:10;1304:36;;;1320:18;;:::i;:::-;1362:112;1470:2;1401:66;1394:4;1390:2;1386:13;1382:86;1378:95;1362:112;:::i;:::-;1349:125;;1497:2;1490:5;1483:17;1537:7;1532:2;1527;1523;1519:11;1515:20;1512:33;1509:53;;;1558:1;1555;1548:12;1509:53;1613:2;1608;1604;1600:11;1595:2;1588:5;1584:14;1571:45;1657:1;1652:2;1647;1640:5;1636:14;1632:23;1625:34;;1678:5;1668:15;;;;;799:890;;;;;:::o;2358:190::-;2440:6;2493:3;2481:9;2472:7;2468:23;2464:33;2461:53;;;2510:1;2507;2500:12;2461:53;-1:-1:-1;2533:9:11;2358:190;-1:-1:-1;2358:190:11:o;2735:643::-;2844:6;2852;2905:2;2893:9;2884:7;2880:23;2876:32;2873:52;;;2921:1;2918;2911:12;2873:52;2961:9;2948:23;2990:18;3031:2;3023:6;3020:14;3017:34;;;3047:1;3044;3037:12;3017:34;3085:6;3074:9;3070:22;3060:32;;3130:7;3123:4;3119:2;3115:13;3111:27;3101:55;;3152:1;3149;3142:12;3101:55;3192:2;3179:16;3218:2;3210:6;3207:14;3204:34;;;3234:1;3231;3224:12;3204:34;3292:7;3287:2;3277:6;3269;3265:19;3261:2;3257:28;3253:37;3250:50;3247:70;;;3313:1;3310;3303:12;3247:70;3344:2;3336:11;;;;;3366:6;;-1:-1:-1;2735:643:11;;-1:-1:-1;;;;2735:643:11:o;3383:180::-;3442:6;3495:2;3483:9;3474:7;3470:23;3466:32;3463:52;;;3511:1;3508;3501:12;3463:52;-1:-1:-1;3534:23:11;;3383:180;-1:-1:-1;3383:180:11:o;4426:184::-;4478:77;4475:1;4468:88;4575:4;4572:1;4565:15;4599:4;4596:1;4589:15;4615:125;4680:9;;;4701:10;;;4698:36;;;4714:18;;:::i;4745:163::-;4812:20;;4872:10;4861:22;;4851:33;;4841:61;;4898:1;4895;4888:12;4841:61;4745:163;;;:::o;4913:184::-;4971:6;5024:2;5012:9;5003:7;4999:23;4995:32;4992:52;;;5040:1;5037;5030:12;4992:52;5063:28;5081:9;5063:28;:::i;:::-;5053:38;4913:184;-1:-1:-1;;;4913:184:11:o;5560:160::-;5626:20;;5686:1;5675:20;;;5665:31;;5655:59;;5710:1;5707;5700:12;5725:182;5782:6;5835:2;5823:9;5814:7;5810:23;5806:32;5803:52;;;5851:1;5848;5841:12;5803:52;5874:27;5891:9;5874:27;:::i;6250:204::-;6326:20;;6386:42;6375:54;;6365:65;;6355:93;;6444:1;6441;6434:12;6459:160;6524:20;;6580:13;;6573:21;6563:32;;6553:60;;6609:1;6606;6599:12;6624:865;6704:6;6757:3;6745:9;6736:7;6732:23;6728:33;6725:53;;;6774:1;6771;6764:12;6725:53;6800:22;;:::i;:::-;6845:37;6872:9;6845:37;:::i;:::-;6838:5;6831:52;6915:46;6957:2;6946:9;6942:18;6915:46;:::i;:::-;6910:2;6903:5;6899:14;6892:70;7022:2;7011:9;7007:18;6994:32;6989:2;6982:5;6978:14;6971:56;7087:2;7076:9;7072:18;7059:32;7054:2;7047:5;7043:14;7036:56;7153:3;7142:9;7138:19;7125:33;7119:3;7112:5;7108:15;7101:58;7220:3;7209:9;7205:19;7192:33;7186:3;7179:5;7175:15;7168:58;7259:38;7292:3;7281:9;7277:19;7259:38;:::i;:::-;7253:3;7246:5;7242:15;7235:63;7331:36;7362:3;7351:9;7347:19;7331:36;:::i;:::-;7325:3;7318:5;7314:15;7307:61;7387:3;7422:36;7454:2;7443:9;7439:18;7422:36;:::i;:::-;7406:14;;;7399:60;7410:5;6624:865;-1:-1:-1;;;6624:865:11:o;7494:184::-;7546:77;7543:1;7536:88;7643:4;7640:1;7633:15;7667:4;7664:1;7657:15;7683:195;7722:3;7753:66;7746:5;7743:77;7740:103;;7823:18;;:::i;:::-;-1:-1:-1;7870:1:11;7859:13;;7683:195::o;8888:481::-;8929:3;8967:5;8961:12;8994:6;8989:3;8982:19;9019:1;9029:162;9043:6;9040:1;9037:13;9029:162;;;9105:4;9161:13;;;9157:22;;9151:29;9133:11;;;9129:20;;9122:59;9058:12;9029:162;;;9033:3;9236:1;9229:4;9220:6;9215:3;9211:16;9207:27;9200:38;9358:4;9288:66;9283:2;9275:6;9271:15;9267:88;9262:3;9258:98;9254:109;9247:116;;;8888:481;;;;:::o;9374:486::-;9433:3;9467:5;9461:12;9499:1;9495:2;9492:9;9482:197;;9535:77;9532:1;9525:88;9636:4;9633:1;9626:15;9664:4;9661:1;9654:15;9482:197;9700:2;9695:3;9688:15;;9749:4;9742:5;9738:16;9732:23;9787:4;9780;9775:3;9771:14;9764:28;9808:46;9848:4;9843:3;9839:14;9825:12;9808:46;:::i;:::-;9801:53;9374:486;-1:-1:-1;;;;9374:486:11:o;9865:1659::-;10220:13;;2045:42;2034:54;2022:67;;10139:4;10168:3;10292:4;10284:6;10280:17;10274:24;10307:75;10376:4;10365:9;10361:20;10347:12;2045:42;2034:54;2022:67;;1947:148;10307:75;;10431:4;10423:6;10419:17;10413:24;10446:77;10517:4;10506:9;10502:20;10486:14;2045:42;2034:54;2022:67;;1947:148;10446:77;;10579:4;10571:6;10567:17;10561:24;10554:4;10543:9;10539:20;10532:54;10642:4;10634:6;10630:17;10624:24;10617:4;10606:9;10602:20;10595:54;10698:4;10690:6;10686:17;10680:24;10713:55;10762:4;10751:9;10747:20;10731:14;3644:10;3633:22;3621:35;;3568:94;10713:55;;10824:4;10816:6;10812:17;10806:24;10799:4;10788:9;10784:20;10777:54;10887:4;10879:6;10875:17;10869:24;10862:4;10851:9;10847:20;10840:54;10913:6;10973:2;10965:6;10961:15;10955:22;10950:2;10939:9;10935:18;10928:50;;10997:6;11052:2;11044:6;11040:15;11034:22;11065:51;11112:2;11101:9;11097:18;11081:14;8862:13;8855:21;8843:34;;8792:91;11065:51;-1:-1:-1;;11135:6:11;11183:15;;;11177:22;11157:18;;;11150:50;11219:6;11267:15;;;11261:22;11241:18;;;11234:50;11315:3;11300:19;;11293:31;;;11347:62;11390:18;;;11382:6;11347:62;:::i;:::-;11333:76;;11458:9;11450:6;11446:22;11440:3;11429:9;11425:19;11418:51;11486:32;11511:6;11503;11486:32;:::i;:::-;11478:40;9865:1659;-1:-1:-1;;;;;;9865:1659:11:o;11529:217::-;11676:2;11665:9;11658:21;11639:4;11696:44;11736:2;11725:9;11721:18;11713:6;11696:44;:::i;11751:184::-;11821:6;11874:2;11862:9;11853:7;11849:23;11845:32;11842:52;;;11890:1;11887;11880:12;11842:52;-1:-1:-1;11913:16:11;;11751:184;-1:-1:-1;11751:184:11:o;11940:::-;11992:77;11989:1;11982:88;12089:4;12086:1;12079:15;12113:4;12110:1;12103:15
Swarm Source
ipfs://ef8802913dc7f390c98427b120eee077bb04d92ea672807f56839d2e432db817
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2,628.03
Net Worth in ETH
1.330336
Token Allocations
WETH
91.67%
ZEUS
7.64%
HYPE
0.51%
Others
0.18%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 47.50% | $1,975.46 | 0.6319 | $1,248.25 | |
| ETH | 7.64% | <$0.000001 | 113,455,180,709.6757 | $200.82 | |
| BASE | 27.43% | $2,263.38 | 0.3185 | $720.84 | |
| ARB | 16.74% | $2,258.88 | 0.1948 | $439.92 | |
| HYPEREVM | 0.51% | $29.69 | 0.45 | $13.36 | |
| BSC | 0.13% | $620.27 | 0.005536 | $3.43 | |
| POL | 0.03% | $0.107413 | 7 | $0.7518 | |
| AVAX | 0.02% | $9 | 0.0501 | $0.4509 | |
| GNO | <0.01% | $0.999891 | 0.2008 | $0.2008 |
Loading...
Loading
Loading...
Loading
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.