diff --git a/.gas-snapshot b/.gas-snapshot new file mode 100644 index 00000000..81862d8d --- /dev/null +++ b/.gas-snapshot @@ -0,0 +1,140 @@ +AccessControlTest:testModifyRailLockup_RevertsWhenCalledByClient() (gas: 30130) +AccessControlTest:testModifyRailLockup_RevertsWhenCalledByRecipient() (gas: 29672) +AccessControlTest:testModifyRailLockup_RevertsWhenCalledByUnauthorized() (gas: 30100) +AccessControlTest:testModifyRailLockup_SucceedsWhenCalledByOperator() (gas: 91468) +AccessControlTest:testModifyRailPayment_RevertsWhenCalledByClient() (gas: 35277) +AccessControlTest:testModifyRailPayment_RevertsWhenCalledByRecipient() (gas: 35123) +AccessControlTest:testModifyRailPayment_RevertsWhenCalledByUnauthorized() (gas: 35991) +AccessControlTest:testModifyRailPayment_SucceedsWhenCalledByOperator() (gas: 105401) +AccessControlTest:testSettleTerminatedRailWithoutValidation_RevertsWhenCalledByOperator() (gas: 213933) +AccessControlTest:testTerminateRail_OnlyOperatorCanTerminateWhenLockupNotFullySettled() (gas: 206826) +AccessControlTest:testTerminateRail_RevertsWhenCalledByRecipient() (gas: 56646) +AccessControlTest:testTerminateRail_RevertsWhenCalledByUnauthorized() (gas: 57492) +AccessControlTest:testTerminateRail_SucceedsWhenCalledByClient() (gas: 91120) +AccessControlTest:testTerminateRail_SucceedsWhenCalledByOperator() (gas: 91225) +AccountLockupSettlementTest:testPartialSettlement() (gas: 891216) +AccountLockupSettlementTest:testSettlementAfterGap() (gas: 879291) +AccountLockupSettlementTest:testSettlementInvariants() (gas: 1153536) +AccountLockupSettlementTest:testSettlementWithNoLockupRate() (gas: 288489) +AccountLockupSettlementTest:testSimpleLockupAccumulation() (gas: 860661) +AccountLockupSettlementTest:testWithdrawWithLockupSettlement() (gas: 881979) +AccountManagementTest:testBasicDeposit() (gas: 182760) +AccountManagementTest:testBasicWithdrawal() (gas: 250817) +AccountManagementTest:testDepositToAnotherUser() (gas: 183002) +AccountManagementTest:testDepositWithInsufficientAllowance() (gas: 96883) +AccountManagementTest:testDepositWithInsufficientBalance() (gas: 105846) +AccountManagementTest:testDepositWithPermit() (gas: 233722) +AccountManagementTest:testDepositWithPermitExpiredPermitReverts() (gas: 98990) +AccountManagementTest:testDepositWithPermitInvalidPermitReverts() (gas: 131723) +AccountManagementTest:testDepositWithPermitMultiple() (gas: 341772) +AccountManagementTest:testDepositWithPermitRevertsForNativeToken() (gas: 77732) +AccountManagementTest:testDepositWithPermitToAnotherUserReverts() (gas: 57251) +AccountManagementTest:testDepositWithPermitZeroAmountNoEffect() (gas: 191111) +AccountManagementTest:testDepositWithZeroRecipient() (gas: 36657) +AccountManagementTest:testGetAccountInfoAfterRateChange() (gas: 1033887) +AccountManagementTest:testGetAccountInfoInDebt() (gas: 907811) +AccountManagementTest:testGetAccountInfoNoLockups() (gas: 204493) +AccountManagementTest:testGetAccountInfoWithFixedLockup() (gas: 840634) +AccountManagementTest:testGetAccountInfoWithPartialSettlement() (gas: 917816) +AccountManagementTest:testGetAccountInfoWithRateLockup() (gas: 918366) +AccountManagementTest:testMultipleDeposits() (gas: 260168) +AccountManagementTest:testMultipleWithdrawals() (gas: 318610) +AccountManagementTest:testNativeDeposit() (gas: 135846) +AccountManagementTest:testNativeDepositWithInsufficientNativeTokens() (gas: 73820) +AccountManagementTest:testNativeWithdrawal() (gas: 191298) +AccountManagementTest:testSettlementDuringDeposit() (gas: 1416703) +AccountManagementTest:testWithdrawEntireBalance() (gas: 207854) +AccountManagementTest:testWithdrawExcessAmount() (gas: 206450) +AccountManagementTest:testWithdrawToAnotherAddress() (gas: 257458) +AccountManagementTest:testWithdrawToWithZeroRecipient() (gas: 37156) +AccountManagementTest:testWithdrawWithLockedFunds() (gas: 930385) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndIncreaseOperatorApproval_HappyPath() (gas: 488037) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndIncreaseOperatorApproval_InvalidPermit() (gas: 432861) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndIncreaseOperatorApproval_WithExistingUsage() (gas: 976463) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndIncreaseOperatorApproval_ZeroIncrease() (gas: 487814) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndOperatorApproval_HappyPath() (gas: 352580) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndOperatorApproval_InvalidPermitReverts() (gas: 305333) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndOperatorApproval_MultipleDeposits() (gas: 497490) +DepositWithPermitAndOperatorApproval:testDepositWithPermitAndOperatorApproval_ZeroAmount() (gas: 314923) +ERC1967ProxyTest:testInitialSetup() (gas: 21033) +ERC1967ProxyTest:testOwnershipTransfer() (gas: 39095) +ERC1967ProxyTest:testUpgradeImplementation() (gas: 7603080) +ERC1967ProxyTest:test_RevertWhen_TransferFromNonOwner() (gas: 37166) +ERC1967ProxyTest:test_RevertWhen_UpgradeFromNonOwner() (gas: 7600044) +FeeOnTransferVulnerabilityTest:testFeeOnTransferVulnerabilityBasic() (gas: 189206) +FeeOnTransferVulnerabilityTest:testFeeOnTransferWithDepositWithPermit() (gas: 247245) +FeeOnTransferVulnerabilityTest:testFeeOnTransferWithDepositWithPermitAndApproveOperator() (gas: 365288) +FeesTest:testNetworkFee() (gas: 417819) +OperatorApprovalTest:testAllowanceChangesWithOneTimePayments() (gas: 822562) +OperatorApprovalTest:testAllowanceEdgeCases() (gas: 1034801) +OperatorApprovalTest:testAllowanceReductionScenarios() (gas: 1297681) +OperatorApprovalTest:testComprehensiveApprovalLifecycle() (gas: 1598624) +OperatorApprovalTest:testIncreaseOperatorApproval_AfterRevocation() (gas: 214185) +OperatorApprovalTest:testIncreaseOperatorApproval_HappyPath() (gas: 220167) +OperatorApprovalTest:testIncreaseOperatorApproval_MultipleIncreases() (gas: 220057) +OperatorApprovalTest:testIncreaseOperatorApproval_OperatorNotApproved() (gas: 40815) +OperatorApprovalTest:testIncreaseOperatorApproval_WithExistingUsage() (gas: 710473) +OperatorApprovalTest:testIncreaseOperatorApproval_ZeroIncrease() (gas: 202528) +OperatorApprovalTest:testIncreaseOperatorApproval_ZeroOperatorAddress() (gas: 38108) +OperatorApprovalTest:testInvalidAddresses() (gas: 29563) +OperatorApprovalTest:testLockupLimitEnforcement() (gas: 629594) +OperatorApprovalTest:testLockupTracking() (gas: 837695) +OperatorApprovalTest:testMaxLockupPeriodEnforcement() (gas: 716575) +OperatorApprovalTest:testModifyingAllowances() (gas: 266523) +OperatorApprovalTest:testNativeFIL() (gas: 118741) +OperatorApprovalTest:testOneTimePaymentScenarios() (gas: 864530) +OperatorApprovalTest:testOperatorAuthorizationBoundaries() (gas: 746498) +OperatorApprovalTest:testRateLimitEnforcement() (gas: 602101) +OperatorApprovalTest:testRateTrackingWithMultipleRails() (gas: 1084370) +OperatorApprovalTest:testReducingLockupPeriodBelowMax() (gas: 803120) +OperatorApprovalTest:testRevokingAndReapprovingOperator() (gas: 264553) +OperatorApprovalTest:test_OperatorCanReduceUsageOfExistingRailDespiteInsufficientAllowance() (gas: 1122307) +OperatorApprovalUsageLeakTest:testMultipleRailsShowCumulativeLeak() (gas: 1753192) +OperatorApprovalUsageLeakTest:testOperatorLockupUsageLeakOnRailFinalization() (gas: 774917) +PayeeFaultArbitrationBugTest:testLockupReturnedWithFault() (gas: 910072) +PayeeFaultArbitrationBugTest:testLockupReturnedWithFaultReducedDuration() (gas: 2059695) +PayeeFaultArbitrationBugTest:testLockupReturnedWithFaultTermination() (gas: 888076) +PayeeRailsTest:testEmptyResult() (gas: 57793) +PayeeRailsTest:testGetManyRails() (gas: 130853979) +PayeeRailsTest:testGetRailsForPayeeAndToken() (gas: 150002) +PayeeRailsTest:testGetRailsForPayerAndToken() (gas: 146086) +PayeeRailsTest:testRailsBeyondEndEpoch() (gas: 346932) +PaymentsEventsTest:testAccountLockupSettledEvent() (gas: 615226) +PaymentsEventsTest:testDepositRecordedEvent() (gas: 317742) +PaymentsEventsTest:testOperatorApprovalUpdatedEvent() (gas: 128062) +PaymentsEventsTest:testRailCreatedEvent() (gas: 283077) +PaymentsEventsTest:testRailFinalizedEvent() (gas: 607949) +PaymentsEventsTest:testRailLockupModifiedEvent() (gas: 476854) +PaymentsEventsTest:testRailOneTimePaymentEvent() (gas: 661987) +PaymentsEventsTest:testRailPaymentRateModifiedEvent() (gas: 457784) +PaymentsEventsTest:testRailSettledEvent() (gas: 729788) +PaymentsEventsTest:testRailTerminatedEvent() (gas: 603303) +PaymentsEventsTest:testToken() (gas: 3082) +PaymentsEventsTest:testWithdrawRecordedEvent() (gas: 212255) +PaymentsTestHelpers:testToken() (gas: 3214) +RailSettlementTest:testBasicSettlement() (gas: 950916) +RailSettlementTest:testMaliciousValidatorHandling() (gas: 2145563) +RailSettlementTest:testModifyRailPayment_SkipsZeroRateEnqueue() (gas: 820232) +RailSettlementTest:testModifyTerminatedRailBeyondEndEpoch() (gas: 1001541) +RailSettlementTest:testPartialSettleOfNonZeroSegment() (gas: 1372524) +RailSettlementTest:testPartialSettleOfZeroSegment() (gas: 1283664) +RailSettlementTest:testRailTerminationAndSettlement() (gas: 958172) +RailSettlementTest:testSettleAlreadyFullySettledRail() (gas: 901553) +RailSettlementTest:testSettleRailInDebt() (gas: 1384893) +RailSettlementTest:testSettleRailWithNonZeroZeroNonZeroRateSequence() (gas: 1186615) +RailSettlementTest:testSettleRailWithRateChange() (gas: 1220634) +RailSettlementTest:testSettleRailWithRateChangeQueueForReducedAmountValidation() (gas: 2341423) +RailSettlementTest:testSettleRailWithRateChangeQueueForReducedDurationValidation() (gas: 2404216) +RailSettlementTest:testSettleRailWithZeroNonZeroZeroRateSequence() (gas: 1045186) +RailSettlementTest:testSettlementWithOperatorCommission() (gas: 939981) +RailSettlementTest:testValidationWithMultipleRateChanges() (gas: 2972396) +RailSettlementTest:testValidationWithReducedAmount() (gas: 2144373) +RailSettlementTest:testValidationWithReducedDuration() (gas: 2140150) +RailSettlementTest:testValidationWithStandardApproval() (gas: 2115610) +RateChangeQueueTest:testBasicQueueOperations() (gas: 200450) +RateChangeQueueTest:testBoundaryValues() (gas: 128754) +RateChangeQueueTest:testEmptyQueueDequeue() (gas: 10584) +RateChangeQueueTest:testEmptyQueuePeek() (gas: 10340) +RateChangeQueueTest:testEmptyQueuePeekTail() (gas: 10538) +RateChangeQueueTest:testMixedOperations() (gas: 223004) +RateChangeQueueTest:testQueueReusability() (gas: 1425379) \ No newline at end of file diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml new file mode 100644 index 00000000..4080a79d --- /dev/null +++ b/.github/workflows/snapshot.yml @@ -0,0 +1,23 @@ +name: Gas Snapshot + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: v1.2.3 + + - name: Check Gas Snapshot + run: | + forge snapshot --check diff --git a/test/RailGetters.t.sol b/test/RailGetters.t.sol index 3272b119..b29ddb84 100644 --- a/test/RailGetters.t.sol +++ b/test/RailGetters.t.sol @@ -149,6 +149,26 @@ contract PayeeRailsTest is Test, BaseTestHelper { payments.terminateRail(rail3Id); } + function testGetManyRails() public { + for (uint256 i = 0; i < 300; i++) { + helper.setupRailWithParameters( + USER1, // from + OPERATOR, // to (payee) + OPERATOR, // operator + 1 wei, // rate + 10, // lockupPeriod + 0, // No fixed lockup + address(0), // No validator + SERVICE_FEE_RECIPIENT // operator commision receiver + ); + } + Payments.RailInfo[] memory rails = payments.getRailsForPayeeAndToken(OPERATOR, address(token)); + assertEq(rails.length, 300); + for (uint256 i = 0; i < 300; i++) { + assertFalse(rails[i].isTerminated); + } + } + function testGetRailsForPayeeAndToken() public view { // Test getting all rails for USER2 and token1 (should include terminated) Payments.RailInfo[] memory rails = payments.getRailsForPayeeAndToken(USER2, address(token));