Skip to content

Commit e005055

Browse files
committed
Extract helper functions for zone checks
1 parent addaf24 commit e005055

File tree

1 file changed

+62
-63
lines changed

1 file changed

+62
-63
lines changed

contracts/trading/seaport16/ImmutableSeaport.sol

Lines changed: 62 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,52 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
7676
}
7777

7878
/**
79-
* @dev Helper function to revert any fulfillment that has an invalid zone
79+
* @dev Helper function to revert any basic order that has an invalid zone.
80+
*
81+
* @param parameters The basic order parameters.
82+
*/
83+
function _rejectBasicOrderIfZoneInvalid(BasicOrderParameters calldata parameters) internal view {
84+
// Basic order types (modulo 4): 0 = FULL_OPEN, 1 = PARTIAL_OPEN, 2 = FULL_RESTRICTED, 3 = PARTIAL_RESTRICTED. Only restricted orders (types 2 and 3) are allowed
85+
if (uint256(parameters.basicOrderType) % 4 != 2 && uint256(parameters.basicOrderType) % 4 != 3) {
86+
revert OrderNotRestricted();
87+
}
88+
_rejectIfZoneInvalid(parameters.zone);
89+
}
90+
91+
/**
92+
* @dev Helper function to revert any order that has an invalid zone.
93+
*
94+
* @param order The order.
95+
*/
96+
function _rejectOrderIfZoneInvalid(Order memory order) internal view {
97+
if (
98+
order.parameters.orderType != OrderType.FULL_RESTRICTED &&
99+
order.parameters.orderType != OrderType.PARTIAL_RESTRICTED
100+
) {
101+
revert OrderNotRestricted();
102+
}
103+
_rejectIfZoneInvalid(order.parameters.zone);
104+
}
105+
106+
/**
107+
* @dev Helper function to revert any advanced order that has an invalid zone.
108+
*
109+
* @param advancedOrder The advanced order.
110+
*/
111+
function _rejectAdvancedOrderIfZoneInvalid(AdvancedOrder memory advancedOrder) internal view {
112+
if (
113+
advancedOrder.parameters.orderType != OrderType.FULL_RESTRICTED &&
114+
advancedOrder.parameters.orderType != OrderType.PARTIAL_RESTRICTED
115+
) {
116+
revert OrderNotRestricted();
117+
}
118+
_rejectIfZoneInvalid(advancedOrder.parameters.zone);
119+
}
120+
121+
/**
122+
* @dev Helper function to revert if the zone is not allowed.
123+
*
124+
* @param zone The zone to check.
80125
*/
81126
function _rejectIfZoneInvalid(address zone) internal view {
82127
if (!allowedZones[zone]) {
@@ -112,12 +157,7 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
112157
function fulfillBasicOrder(
113158
BasicOrderParameters calldata parameters
114159
) public payable virtual override returns (bool fulfilled) {
115-
// All restricted orders are captured using this method
116-
if (uint256(parameters.basicOrderType) % 4 != 2 && uint256(parameters.basicOrderType) % 4 != 3) {
117-
revert OrderNotRestricted();
118-
}
119-
120-
_rejectIfZoneInvalid(parameters.zone);
160+
_rejectBasicOrderIfZoneInvalid(parameters);
121161

122162
return super.fulfillBasicOrder(parameters);
123163
}
@@ -154,12 +194,7 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
154194
function fulfillBasicOrder_efficient_6GL6yc(
155195
BasicOrderParameters calldata parameters
156196
) public payable virtual override returns (bool fulfilled) {
157-
// All restricted orders are captured using this method
158-
if (uint256(parameters.basicOrderType) % 4 != 2 && uint256(parameters.basicOrderType) % 4 != 3) {
159-
revert OrderNotRestricted();
160-
}
161-
162-
_rejectIfZoneInvalid(parameters.zone);
197+
_rejectBasicOrderIfZoneInvalid(parameters);
163198

164199
return super.fulfillBasicOrder_efficient_6GL6yc(parameters);
165200
}
@@ -193,14 +228,7 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
193228
Order calldata order,
194229
bytes32 fulfillerConduitKey
195230
) public payable virtual override returns (bool fulfilled) {
196-
if (
197-
order.parameters.orderType != OrderType.FULL_RESTRICTED &&
198-
order.parameters.orderType != OrderType.PARTIAL_RESTRICTED
199-
) {
200-
revert OrderNotRestricted();
201-
}
202-
203-
_rejectIfZoneInvalid(order.parameters.zone);
231+
_rejectOrderIfZoneInvalid(order);
204232

205233
return super.fulfillOrder(order, fulfillerConduitKey);
206234
}
@@ -260,14 +288,7 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
260288
bytes32 fulfillerConduitKey,
261289
address recipient
262290
) public payable virtual override returns (bool fulfilled) {
263-
if (
264-
advancedOrder.parameters.orderType != OrderType.FULL_RESTRICTED &&
265-
advancedOrder.parameters.orderType != OrderType.PARTIAL_RESTRICTED
266-
) {
267-
revert OrderNotRestricted();
268-
}
269-
270-
_rejectIfZoneInvalid(advancedOrder.parameters.zone);
291+
_rejectAdvancedOrderIfZoneInvalid(advancedOrder);
271292

272293
return super.fulfillAdvancedOrder(advancedOrder, criteriaResolvers, fulfillerConduitKey, recipient);
273294
}
@@ -347,15 +368,10 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
347368
override
348369
returns (bool[] memory, /* availableOrders */ Execution[] memory /* executions */)
349370
{
350-
for (uint256 i = 0; i < orders.length; i++) {
371+
uint256 numberOfOrders = orders.length;
372+
for (uint256 i = 0; i < numberOfOrders; i++) {
351373
Order memory order = orders[i];
352-
if (
353-
order.parameters.orderType != OrderType.FULL_RESTRICTED &&
354-
order.parameters.orderType != OrderType.PARTIAL_RESTRICTED
355-
) {
356-
revert OrderNotRestricted();
357-
}
358-
_rejectIfZoneInvalid(order.parameters.zone);
374+
_rejectOrderIfZoneInvalid(order);
359375
}
360376

361377
return
@@ -473,16 +489,10 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
473489
override
474490
returns (bool[] memory, /* availableOrders */ Execution[] memory /* executions */)
475491
{
476-
for (uint256 i = 0; i < advancedOrders.length; i++) {
492+
uint256 numberOfAdvancedOrders = advancedOrders.length;
493+
for (uint256 i = 0; i < numberOfAdvancedOrders; i++) {
477494
AdvancedOrder memory advancedOrder = advancedOrders[i];
478-
if (
479-
advancedOrder.parameters.orderType != OrderType.FULL_RESTRICTED &&
480-
advancedOrder.parameters.orderType != OrderType.PARTIAL_RESTRICTED
481-
) {
482-
revert OrderNotRestricted();
483-
}
484-
485-
_rejectIfZoneInvalid(advancedOrder.parameters.zone);
495+
_rejectAdvancedOrderIfZoneInvalid(advancedOrder);
486496
}
487497

488498
return
@@ -536,15 +546,10 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
536546
*/
537547
Fulfillment[] calldata fulfillments
538548
) public payable virtual override returns (Execution[] memory /* executions */) {
539-
for (uint256 i = 0; i < orders.length; i++) {
549+
uint256 numberOfOrders = orders.length;
550+
for (uint256 i = 0; i < numberOfOrders; i++) {
540551
Order memory order = orders[i];
541-
if (
542-
order.parameters.orderType != OrderType.FULL_RESTRICTED &&
543-
order.parameters.orderType != OrderType.PARTIAL_RESTRICTED
544-
) {
545-
revert OrderNotRestricted();
546-
}
547-
_rejectIfZoneInvalid(order.parameters.zone);
552+
_rejectOrderIfZoneInvalid(order);
548553
}
549554

550555
return super.matchOrders(orders, fulfillments);
@@ -617,16 +622,10 @@ contract ImmutableSeaport is Consideration, Ownable, ImmutableSeaportEvents {
617622
Fulfillment[] calldata fulfillments,
618623
address recipient
619624
) public payable virtual override returns (Execution[] memory /* executions */) {
620-
for (uint256 i = 0; i < advancedOrders.length; i++) {
625+
uint256 numberOfAdvancedOrders = advancedOrders.length;
626+
for (uint256 i = 0; i < numberOfAdvancedOrders; i++) {
621627
AdvancedOrder memory advancedOrder = advancedOrders[i];
622-
if (
623-
advancedOrder.parameters.orderType != OrderType.FULL_RESTRICTED &&
624-
advancedOrder.parameters.orderType != OrderType.PARTIAL_RESTRICTED
625-
) {
626-
revert OrderNotRestricted();
627-
}
628-
629-
_rejectIfZoneInvalid(advancedOrder.parameters.zone);
628+
_rejectAdvancedOrderIfZoneInvalid(advancedOrder);
630629
}
631630

632631
return super.matchAdvancedOrders(advancedOrders, criteriaResolvers, fulfillments, recipient);

0 commit comments

Comments
 (0)