@@ -15,6 +15,7 @@ import { PPMMath } from "../../libraries/PPMMath.sol";
1515
1616/**
1717 * @title RecurringCollector contract
18+ * @author Edge & Node
1819 * @dev Implements the {IRecurringCollector} interface.
1920 * @notice A payments collector contract that can be used to collect payments using a RCA (Recurring Collection Agreement).
2021 * @custom:security-contact Please email security+contracts@thegraph.com if you find any
@@ -26,6 +27,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
2627 /// @notice The minimum number of seconds that must be between two collections
2728 uint32 public constant MIN_SECONDS_COLLECTION_WINDOW = 600 ;
2829
30+ /* solhint-disable gas-small-strings */
2931 /// @notice The EIP712 typehash for the RecurringCollectionAgreement struct
3032 bytes32 public constant EIP712_RCA_TYPEHASH =
3133 keccak256 (
@@ -37,6 +39,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
3739 keccak256 (
3840 "RecurringCollectionAgreementUpdate(bytes16 agreementId,uint64 deadline,uint64 endsAt,uint256 maxInitialTokens,uint256 maxOngoingTokensPerSecond,uint32 minSecondsPerCollection,uint32 maxSecondsPerCollection,uint32 nonce,bytes metadata) "
3941 );
42+ /* solhint-enable gas-small-strings */
4043
4144 /// @notice Tracks agreements
4245 mapping (bytes16 agreementId = > AgreementData data ) public agreements;
@@ -69,6 +72,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
6972 }
7073 }
7174
75+ /* solhint-disable function-max-lines */
7276 /**
7377 * @inheritdoc IRecurringCollector
7478 * @notice Accept a Recurring Collection Agreement.
@@ -89,10 +93,12 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
8993 msg .sender == signedRCA.rca.dataService,
9094 RecurringCollectorUnauthorizedCaller (msg .sender , signedRCA.rca.dataService)
9195 );
96+ /* solhint-disable gas-strict-inequalities */
9297 require (
9398 signedRCA.rca.deadline >= block .timestamp ,
9499 RecurringCollectorAgreementDeadlineElapsed (block .timestamp , signedRCA.rca.deadline)
95100 );
101+ /* solhint-enable gas-strict-inequalities */
96102
97103 // check that the voucher is signed by the payer (or proxy)
98104 _requireAuthorizedRCASigner (signedRCA);
@@ -145,6 +151,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
145151
146152 return agreementId;
147153 }
154+ /* solhint-enable function-max-lines */
148155
149156 /**
150157 * @inheritdoc IRecurringCollector
@@ -179,6 +186,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
179186 );
180187 }
181188
189+ /* solhint-disable function-max-lines */
182190 /**
183191 * @inheritdoc IRecurringCollector
184192 * @notice Update a Recurring Collection Agreement.
@@ -188,10 +196,12 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
188196 * for the entire period since lastCollectionAt.
189197 */
190198 function update (SignedRCAU calldata signedRCAU ) external {
199+ /* solhint-disable gas-strict-inequalities */
191200 require (
192201 signedRCAU.rcau.deadline >= block .timestamp ,
193202 RecurringCollectorAgreementDeadlineElapsed (block .timestamp , signedRCAU.rcau.deadline)
194203 );
204+ /* solhint-enable gas-strict-inequalities */
195205
196206 AgreementData storage agreement = _getAgreementStorage (signedRCAU.rcau.agreementId);
197207 require (
@@ -240,6 +250,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
240250 agreement.maxSecondsPerCollection
241251 );
242252 }
253+ /* solhint-enable function-max-lines */
243254
244255 /// @inheritdoc IRecurringCollector
245256 function recoverRCASigner (SignedRCA calldata signedRCA ) external view returns (address ) {
@@ -268,7 +279,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
268279
269280 /// @inheritdoc IRecurringCollector
270281 function getCollectionInfo (
271- AgreementData memory agreement
282+ AgreementData calldata agreement
272283 ) external view returns (bool isCollectable , uint256 collectionSeconds , AgreementNotCollectableReason reason ) {
273284 return _getCollectionInfo (agreement);
274285 }
@@ -293,6 +304,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
293304 return abi.decode (data, (CollectParams));
294305 }
295306
307+ /* solhint-disable function-max-lines */
296308 /**
297309 * @notice Collect payment through the payments protocol.
298310 * @dev Caller must be the data service the RCA was issued to.
@@ -336,10 +348,12 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
336348 tokensToCollect = _requireValidCollect (agreement, _params.agreementId, _params.tokens, collectionSeconds);
337349
338350 uint256 slippage = _params.tokens - tokensToCollect;
351+ /* solhint-disable gas-strict-inequalities */
339352 require (
340353 slippage <= _params.maxSlippage,
341354 RecurringCollectorExcessiveSlippage (_params.tokens, tokensToCollect, _params.maxSlippage)
342355 );
356+ /* solhint-enable gas-strict-inequalities */
343357 }
344358 agreement.lastCollectionAt = uint64 (block .timestamp );
345359
@@ -376,6 +390,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
376390
377391 return tokensToCollect;
378392 }
393+ /* solhint-enable function-max-lines */
379394
380395 /**
381396 * @notice Requires that the collection window parameters are valid.
@@ -395,6 +410,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
395410 // Collection window needs to be at least MIN_SECONDS_COLLECTION_WINDOW
396411 require (
397412 _maxSecondsPerCollection > _minSecondsPerCollection &&
413+ // solhint-disable-next-line gas-strict-inequalities
398414 (_maxSecondsPerCollection - _minSecondsPerCollection >= MIN_SECONDS_COLLECTION_WINDOW),
399415 RecurringCollectorAgreementInvalidCollectionWindow (
400416 MIN_SECONDS_COLLECTION_WINDOW,
@@ -405,6 +421,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
405421
406422 // Agreement needs to last at least one min collection window
407423 require (
424+ // solhint-disable-next-line gas-strict-inequalities
408425 _endsAt - block .timestamp >= _minSecondsPerCollection + MIN_SECONDS_COLLECTION_WINDOW,
409426 RecurringCollectorAgreementInvalidDuration (
410427 _minSecondsPerCollection + MIN_SECONDS_COLLECTION_WINDOW,
@@ -431,6 +448,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
431448 block .timestamp > _agreement.endsAt;
432449 if (! canceledOrElapsed) {
433450 require (
451+ // solhint-disable-next-line gas-strict-inequalities
434452 _collectionSeconds >= _agreement.minSecondsPerCollection,
435453 RecurringCollectorCollectionTooSoon (
436454 _agreementId,
@@ -440,6 +458,7 @@ contract RecurringCollector is EIP712, GraphDirectory, Authorizable, IRecurringC
440458 );
441459 }
442460 require (
461+ // solhint-disable-next-line gas-strict-inequalities
443462 _collectionSeconds <= _agreement.maxSecondsPerCollection,
444463 RecurringCollectorCollectionTooLate (
445464 _agreementId,
0 commit comments