@@ -271,6 +271,13 @@ library IndexingAgreement {
271
271
*/
272
272
error IndexingAgreementNotAuthorized (bytes16 agreementId , address unauthorizedIndexer );
273
273
274
+ /**
275
+ * @notice Thrown when indexing agreement terms are invalid
276
+ * @param tokensPerSecond The indexing agreement tokens per second
277
+ * @param maxOngoingTokensPerSecond The RCA maximum tokens per second
278
+ */
279
+ error IndexingAgreementInvalidTerms (uint256 tokensPerSecond , uint256 maxOngoingTokensPerSecond );
280
+
274
281
/**
275
282
* @notice Accept an indexing agreement.
276
283
*
@@ -343,7 +350,7 @@ library IndexingAgreement {
343
350
agreement.allocationId = allocationId;
344
351
345
352
require (metadata.version == IndexingAgreementVersion.V1, IndexingAgreementInvalidVersion (metadata.version));
346
- _setTermsV1 (self, agreementId, metadata.terms);
353
+ _setTermsV1 (self, agreementId, metadata.terms, signedRCA.rca.maxOngoingTokensPerSecond );
347
354
348
355
emit IndexingAgreementAccepted (
349
356
signedRCA.rca.serviceProvider,
@@ -392,7 +399,12 @@ library IndexingAgreement {
392
399
393
400
require (wrapper.agreement.version == IndexingAgreementVersion.V1, "internal: invalid version " );
394
401
require (metadata.version == IndexingAgreementVersion.V1, IndexingAgreementInvalidVersion (metadata.version));
395
- _setTermsV1 (self, signedRCAU.rcau.agreementId, metadata.terms);
402
+ _setTermsV1 (
403
+ self,
404
+ signedRCAU.rcau.agreementId,
405
+ metadata.terms,
406
+ wrapper.collectorAgreement.maxOngoingTokensPerSecond
407
+ );
396
408
397
409
emit IndexingAgreementUpdated ({
398
410
indexer: wrapper.collectorAgreement.serviceProvider,
@@ -621,9 +633,16 @@ library IndexingAgreement {
621
633
* @param _manager The indexing agreement storage manager
622
634
* @param _agreementId The id of the agreement to update
623
635
* @param _data The encoded terms data
636
+ * @param maxOngoingTokensPerSecond The RCA maximum tokens per second limit for validation
624
637
*/
625
- function _setTermsV1 (StorageManager storage _manager , bytes16 _agreementId , bytes memory _data ) private {
638
+ function _setTermsV1 (
639
+ StorageManager storage _manager ,
640
+ bytes16 _agreementId ,
641
+ bytes memory _data ,
642
+ uint256 maxOngoingTokensPerSecond
643
+ ) private {
626
644
IndexingAgreementTermsV1 memory newTerms = IndexingAgreementDecoder.decodeIndexingAgreementTermsV1 (_data);
645
+ _validateTermsAgainstRCA (newTerms, maxOngoingTokensPerSecond);
627
646
_manager.termsV1[_agreementId].tokensPerSecond = newTerms.tokensPerSecond;
628
647
_manager.termsV1[_agreementId].tokensPerEntityPerSecond = newTerms.tokensPerEntityPerSecond;
629
648
}
@@ -764,4 +783,19 @@ library IndexingAgreement {
764
783
collectorAgreement: _directory ().recurringCollector ().getAgreement (agreementId)
765
784
});
766
785
}
786
+
787
+ /**
788
+ * @notice Validates indexing agreement terms against RCA limits
789
+ * @param terms The indexing agreement terms to validate
790
+ * @param maxOngoingTokensPerSecond The RCA maximum tokens per second limit
791
+ */
792
+ function _validateTermsAgainstRCA (
793
+ IndexingAgreementTermsV1 memory terms ,
794
+ uint256 maxOngoingTokensPerSecond
795
+ ) private pure {
796
+ require (
797
+ terms.tokensPerSecond <= maxOngoingTokensPerSecond,
798
+ IndexingAgreementInvalidTerms (terms.tokensPerSecond, maxOngoingTokensPerSecond)
799
+ );
800
+ }
767
801
}
0 commit comments