@@ -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