Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add unavailable reason to order details #1214

Merged
merged 4 commits into from
May 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions contracts/helpers/sol/SpaceEnums.sol
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@ enum UnavailableReason {
STARTS_IN_FUTURE,
CANCELLED,
ALREADY_FULFILLED,
MAX_FULFILLED_SATISFIED,
GENERATE_ORDER_FAILURE
}

Expand Down
15 changes: 13 additions & 2 deletions contracts/helpers/sol/executions/ExecutionHelper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import {
OrderDetails
} from "../fulfillments/lib/Structs.sol";

import { UnavailableReason } from "../SpaceEnums.sol";

/**
* @dev Helper contract for deriving explicit and executions from orders and
* fulfillment details
Expand Down Expand Up @@ -60,7 +62,7 @@ library ExecutionHelper {
FulfillmentComponent[][] memory offerFulfillments,
FulfillmentComponent[][] memory considerationFulfillments,
uint256 nativeTokensSupplied,
bool[] memory availableOrders
OrderDetails[] memory orderDetails
)
public
pure
Expand All @@ -73,6 +75,14 @@ library ExecutionHelper {
{
FulfillmentDetails memory details = copy(fulfillmentDetails);

bool[] memory availableOrders = new bool[](orderDetails.length);

for (uint256 i = 0; i < orderDetails.length; ++i) {
availableOrders[i] =
orderDetails[i].unavailableReason ==
UnavailableReason.AVAILABLE;
}

implicitExecutionsPre = processImplicitPreOrderExecutions(
details,
availableOrders,
Expand Down Expand Up @@ -1166,7 +1176,8 @@ library ExecutionHelper {
offer: order.offer.copy(),
consideration: order.consideration.copy(),
isContract: order.isContract,
orderHash: order.orderHash
orderHash: order.orderHash,
unavailableReason: order.unavailableReason
});
}
}
Expand Down
4 changes: 4 additions & 0 deletions contracts/helpers/sol/fulfillments/lib/Structs.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ import {
MatchComponent,
MatchComponentType
} from "../../lib/types/MatchComponentType.sol";

import {
FulfillmentComponent,
SpentItem,
ReceivedItem
} from "../../SeaportStructs.sol";

import { UnavailableReason } from "../../SpaceEnums.sol";

struct FulfillmentHelperCounterLayout {
uint256 fulfillmentCounter;
}
Expand Down Expand Up @@ -75,6 +78,7 @@ struct OrderDetails {
ReceivedItem[] consideration;
bool isContract;
bytes32 orderHash;
UnavailableReason unavailableReason;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
ReceivedItem,
CriteriaResolver
} from "../../SeaportStructs.sol";
import { UnavailableReason } from "../../SpaceEnums.sol";
import { MatchFulfillmentLib } from "./MatchFulfillmentLib.sol";
import { MatchFulfillmentLayout } from "./MatchFulfillmentLayout.sol";

Expand All @@ -40,7 +41,8 @@ contract MatchFulfillmentHelper is AmountDeriverHelper {
*/
function getMatchedFulfillments(
Order[] memory orders,
bytes32[] memory orderHashes
bytes32[] memory orderHashes,
UnavailableReason[] memory unavailableReasons
)
public
returns (
Expand All @@ -49,7 +51,11 @@ contract MatchFulfillmentHelper is AmountDeriverHelper {
MatchComponent[] memory remainingConsiderationComponents
)
{
OrderDetails[] memory orderDetails = toOrderDetails(orders, orderHashes);
OrderDetails[] memory orderDetails = toOrderDetails(
orders,
orderHashes,
unavailableReasons
);

return getMatchedFulfillments(orderDetails);
}
Expand All @@ -65,7 +71,8 @@ contract MatchFulfillmentHelper is AmountDeriverHelper {
function getMatchedFulfillments(
AdvancedOrder[] memory orders,
CriteriaResolver[] memory resolvers,
bytes32[] memory orderHashes
bytes32[] memory orderHashes,
UnavailableReason[] memory unavailableReasons
)
public
returns (
Expand All @@ -74,7 +81,12 @@ contract MatchFulfillmentHelper is AmountDeriverHelper {
MatchComponent[] memory remainingConsiderationComponents
)
{
OrderDetails[] memory details = toOrderDetails(orders, resolvers, orderHashes);
OrderDetails[] memory details = toOrderDetails(
orders,
resolvers,
orderHashes,
unavailableReasons
);
return getMatchedFulfillments(details);
}

Expand Down
18 changes: 11 additions & 7 deletions contracts/helpers/sol/lib/AdvancedOrderLib.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { ItemType } from "../../../lib/ConsiderationEnums.sol";

import {
AdditionalRecipient,
AdvancedOrder,
Expand All @@ -18,7 +16,9 @@ import {
SpentItem
} from "../../../lib/ConsiderationStructs.sol";

import { BasicOrderType } from "../../../lib/ConsiderationEnums.sol";
import { BasicOrderType, ItemType } from "../../../lib/ConsiderationEnums.sol";

import { UnavailableReason } from "../SpaceEnums.sol";

import { OrderParametersLib } from "./OrderParametersLib.sol";

Expand Down Expand Up @@ -743,7 +743,8 @@ library AdvancedOrderLib {
function getOrderDetails(
AdvancedOrder[] memory advancedOrders,
CriteriaResolver[] memory criteriaResolvers,
bytes32[] memory orderHashes
bytes32[] memory orderHashes,
UnavailableReason[] memory unavailableReasons
) internal view returns (OrderDetails[] memory) {
OrderDetails[] memory orderDetails = new OrderDetails[](
advancedOrders.length
Expand All @@ -754,7 +755,8 @@ library AdvancedOrderLib {
advancedOrders[i],
i,
criteriaResolvers,
orderHashes[i]
orderHashes[i],
unavailableReasons[i]
);
}

Expand All @@ -765,7 +767,8 @@ library AdvancedOrderLib {
AdvancedOrder memory order,
uint256 orderIndex,
CriteriaResolver[] memory resolvers,
bytes32 orderHash
bytes32 orderHash,
UnavailableReason unavailableReason
) internal view returns (OrderDetails memory) {
(SpentItem[] memory offer, ReceivedItem[] memory consideration) = order
.parameters
Expand All @@ -783,7 +786,8 @@ library AdvancedOrderLib {
offer: offer,
consideration: consideration,
isContract: order.parameters.orderType == OrderType.CONTRACT,
orderHash: orderHash
orderHash: orderHash,
unavailableReason: unavailableReason
});
}
}
18 changes: 12 additions & 6 deletions contracts/helpers/sol/lib/ZoneParametersLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import { SeaportInterface } from "../SeaportInterface.sol";

import { GettersAndDerivers } from "../../../lib/GettersAndDerivers.sol";

import { UnavailableReason } from "../SpaceEnums.sol";

import { AdvancedOrderLib } from "./AdvancedOrderLib.sol";

import { ConsiderationItemLib } from "./ConsiderationItemLib.sol";
Expand Down Expand Up @@ -117,7 +119,8 @@ library ZoneParametersLib {
address fulfiller,
uint256 maximumFulfilled,
address seaport,
CriteriaResolver[] memory criteriaResolvers
CriteriaResolver[] memory criteriaResolvers,
UnavailableReason[] memory unavailableReasons
) internal view returns (ZoneParameters[] memory) {
return
_getZoneParametersFromStruct(
Expand All @@ -127,7 +130,7 @@ library ZoneParametersLib {
maximumFulfilled,
seaport,
criteriaResolvers
)
), unavailableReasons
);
}

Expand All @@ -149,13 +152,14 @@ library ZoneParametersLib {
}

function _getZoneParametersFromStruct(
ZoneParametersStruct memory zoneParametersStruct
ZoneParametersStruct memory zoneParametersStruct,
UnavailableReason[] memory unavailableReasons
) internal view returns (ZoneParameters[] memory) {
// TODO: use testHelpers pattern to use single amount deriver helper
ZoneDetails memory details = _getZoneDetails(zoneParametersStruct);

// Convert offer + consideration to spent + received
_applyOrderDetails(details, zoneParametersStruct);
_applyOrderDetails(details, zoneParametersStruct, unavailableReasons);

// Iterate over advanced orders to calculate orderHashes
_applyOrderHashes(details, zoneParametersStruct.seaport);
Expand All @@ -182,7 +186,8 @@ library ZoneParametersLib {

function _applyOrderDetails(
ZoneDetails memory details,
ZoneParametersStruct memory zoneParametersStruct
ZoneParametersStruct memory zoneParametersStruct,
UnavailableReason[] memory unavailableReasons
) internal view {
bytes32[] memory orderHashes = details.advancedOrders.getOrderHashes(
zoneParametersStruct.seaport
Expand All @@ -192,7 +197,8 @@ library ZoneParametersLib {
.advancedOrders
.getOrderDetails(
zoneParametersStruct.criteriaResolvers,
orderHashes
orderHashes,
unavailableReasons
);
}

Expand Down
25 changes: 17 additions & 8 deletions contracts/helpers/sol/lib/fulfillment/AmountDeriverHelper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { OfferItemLib } from "../OfferItemLib.sol";
import { ConsiderationItemLib } from "../ConsiderationItemLib.sol";
import { OrderParametersLib } from "../OrderParametersLib.sol";
import { OrderDetails } from "../../fulfillments/lib/Structs.sol";
import { UnavailableReason } from "../../SpaceEnums.sol";

/**
* @notice Note that this contract relies on current block.timestamp to determine amounts.
Expand Down Expand Up @@ -97,7 +98,8 @@ contract AmountDeriverHelper is AmountDeriver {

function toOrderDetails(
OrderParameters memory order,
bytes32 orderHash
bytes32 orderHash,
UnavailableReason unavailableReason
) internal view returns (OrderDetails memory) {
(SpentItem[] memory offer, ReceivedItem[] memory consideration) = this
.getSpentAndReceivedItems(order);
Expand All @@ -108,19 +110,22 @@ contract AmountDeriverHelper is AmountDeriver {
offer: offer,
consideration: consideration,
isContract: order.orderType == OrderType.CONTRACT,
orderHash: orderHash
orderHash: orderHash,
unavailableReason: unavailableReason
});
}

function toOrderDetails(
Order[] memory order,
bytes32[] memory orderHashes
bytes32[] memory orderHashes,
UnavailableReason[] memory unavailableReasons
) public view returns (OrderDetails[] memory) {
OrderDetails[] memory orderDetails = new OrderDetails[](order.length);
for (uint256 i = 0; i < order.length; i++) {
orderDetails[i] = toOrderDetails(
order[i].parameters,
orderHashes[i]
orderHashes[i],
unavailableReasons[i]
);
}
return orderDetails;
Expand All @@ -129,15 +134,17 @@ contract AmountDeriverHelper is AmountDeriver {
function toOrderDetails(
AdvancedOrder[] memory orders,
CriteriaResolver[] memory resolvers,
bytes32[] memory orderHashes
bytes32[] memory orderHashes,
UnavailableReason[] memory unavailableReasons
) public view returns (OrderDetails[] memory) {
OrderDetails[] memory orderDetails = new OrderDetails[](orders.length);
for (uint256 i = 0; i < orders.length; i++) {
orderDetails[i] = toOrderDetails(
orders[i],
i,
resolvers,
orderHashes[i]
orderHashes[i],
unavailableReasons[i]
);
}
return orderDetails;
Expand All @@ -147,7 +154,8 @@ contract AmountDeriverHelper is AmountDeriver {
AdvancedOrder memory order,
uint256 orderIndex,
CriteriaResolver[] memory resolvers,
bytes32 orderHash
bytes32 orderHash,
UnavailableReason unavailableReason
) internal view returns (OrderDetails memory) {
(SpentItem[] memory offer, ReceivedItem[] memory consideration) = this
.getSpentAndReceivedItems(order, orderIndex, resolvers);
Expand All @@ -159,7 +167,8 @@ contract AmountDeriverHelper is AmountDeriver {
offer: offer,
consideration: consideration,
isContract: order.parameters.orderType == OrderType.CONTRACT,
orderHash: orderHash
orderHash: orderHash,
unavailableReason: unavailableReason
});
}

Expand Down
2 changes: 1 addition & 1 deletion lib/ds-test
2 changes: 1 addition & 1 deletion lib/solarray
11 changes: 8 additions & 3 deletions test/foundry/new/FuzzEngine.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import {
OrderType
} from "seaport-sol/SeaportStructs.sol";

import { UnavailableReason } from "seaport-sol/SpaceEnums.sol";

import { SeaportInterface } from "seaport-sol/SeaportInterface.sol";

import {
Expand Down Expand Up @@ -1202,7 +1204,8 @@ contract FuzzEngineTest is FuzzEngine {
(fulfillments, , ) = matcher.getMatchedFulfillments(
orders,
resolvers,
orderHashes
orderHashes,
new UnavailableReason[](orders.length)
);
}

Expand Down Expand Up @@ -1331,7 +1334,8 @@ contract FuzzEngineTest is FuzzEngine {
(fulfillments, , ) = matcher.getMatchedFulfillments(
advancedOrders,
resolvers,
orderHashes
orderHashes,
new UnavailableReason[](advancedOrders.length)
);
}

Expand Down Expand Up @@ -1724,7 +1728,8 @@ contract FuzzEngineTest is FuzzEngine {
address(getSeaport()),
address(this),
new CriteriaResolver[](0),
2
2,
new UnavailableReason[](advancedOrders.length)
);

run(context);
Expand Down
Loading