diff --git a/.gas-snapshot b/.gas-snapshot index 43ff31640..77c9c7965 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -12,33 +12,33 @@ Base64Test:testBase64EncodeToStringWithSinglePadding() (gas: 1636) Base64Test:testBase64WordBoundary() (gas: 12511) Base64Test:test__codesize() (gas: 7855) CREATE3Test:testDeployERC20() (gas: 800066) -CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 869545, ~: 869184) +CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 870004, ~: 869184) CREATE3Test:testDeployedUpperBitsSafeForPlainSolidity() (gas: 609) CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96901101) -CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880219, ~: 96880072) +CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880207, ~: 96880072) CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889413) -CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881091, ~: 96881057) +CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881081, ~: 96881057) CREATE3Test:test__codesize() (gas: 15798) DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 256, μ: 4029, ~: 4019) -DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 256, μ: 3976, ~: 3932) -DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 256, μ: 3975, ~: 3939) -DateTimeLibTest:testAddSubDiffMonths(uint256,uint256) (runs: 256, μ: 7080, ~: 7075) -DateTimeLibTest:testAddSubDiffSeconds(uint256,uint256) (runs: 256, μ: 3621, ~: 3586) -DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 256, μ: 6643, ~: 6640) +DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 256, μ: 3977, ~: 3932) +DateTimeLibTest:testAddSubDiffMinutes(uint256,uint256) (runs: 256, μ: 3977, ~: 3946) +DateTimeLibTest:testAddSubDiffMonths(uint256,uint256) (runs: 256, μ: 7079, ~: 7075) +DateTimeLibTest:testAddSubDiffSeconds(uint256,uint256) (runs: 256, μ: 3623, ~: 3597) +DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 256, μ: 6642, ~: 6640) DateTimeLibTest:testDateTimeArithmeticReverts() (gas: 4597) DateTimeLibTest:testDateTimeMaxSupported() (gas: 2502) -DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 3968, ~: 4050) -DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2464, ~: 2440) +DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 3972, ~: 4050) +DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2467, ~: 2440) DateTimeLibTest:testDateToAndFroEpochDay() (gas: 865464) DateTimeLibTest:testDateToAndFroTimestamp() (gas: 909205) DateTimeLibTest:testDateToEpochDay() (gas: 1603) -DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2207, ~: 2184) -DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2129, ~: 2105) +DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2209, ~: 2178) +DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2132, ~: 2105) DateTimeLibTest:testDateToEpochDayGas() (gas: 756479) DateTimeLibTest:testDateToEpochDayGas2() (gas: 759345) DateTimeLibTest:testDayOfWeek() (gas: 175297) DateTimeLibTest:testDaysInMonth() (gas: 1204) -DateTimeLibTest:testDaysInMonth(uint256,uint256) (runs: 256, μ: 1033, ~: 1051) +DateTimeLibTest:testDaysInMonth(uint256,uint256) (runs: 256, μ: 1030, ~: 1051) DateTimeLibTest:testDaysToDate() (gas: 1958) DateTimeLibTest:testEpochDayToDate(uint256) (runs: 256, μ: 1019, ~: 1019) DateTimeLibTest:testEpochDayToDateDifferential(uint256) (runs: 256, μ: 1812, ~: 1762) @@ -46,22 +46,22 @@ DateTimeLibTest:testEpochDayToDateDifferential2(uint256) (runs: 256, μ: 1750, ~ DateTimeLibTest:testEpochDayToDateGas() (gas: 339723) DateTimeLibTest:testEpochDayToDateGas2() (gas: 357444) DateTimeLibTest:testIsLeapYear() (gas: 741) -DateTimeLibTest:testIsLeapYear(uint256) (runs: 256, μ: 527, ~: 495) +DateTimeLibTest:testIsLeapYear(uint256) (runs: 256, μ: 526, ~: 495) DateTimeLibTest:testIsSupportedDateFalse() (gas: 1651) -DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2826, ~: 2810) +DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2834, ~: 2842) DateTimeLibTest:testIsSupportedDateTrue() (gas: 670) DateTimeLibTest:testIsSupportedEpochDayFalse() (gas: 597) DateTimeLibTest:testIsSupportedEpochDayTrue() (gas: 305) DateTimeLibTest:testIsSupportedTimestampFalse() (gas: 599) DateTimeLibTest:testIsSupportedTimestampTrue() (gas: 304) -DateTimeLibTest:testIsWeekEnd(uint256) (runs: 256, μ: 726, ~: 662) +DateTimeLibTest:testIsWeekEnd(uint256) (runs: 256, μ: 727, ~: 662) DateTimeLibTest:testMondayTimestamp() (gas: 1106) -DateTimeLibTest:testMondayTimestamp(uint256) (runs: 256, μ: 728, ~: 650) +DateTimeLibTest:testMondayTimestamp(uint256) (runs: 256, μ: 730, ~: 650) DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp() (gas: 12031) -DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 256, μ: 3451, ~: 3474) +DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 256, μ: 3456, ~: 3488) DateTimeLibTest:testWeekday() (gas: 705) DateTimeLibTest:test__codesize() (gas: 20051) -DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 256, μ: 913255, ~: 767526) +DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 256, μ: 939470, ~: 768053) DynamicBufferLibTest:testDynamicBufferChaining() (gas: 26013) DynamicBufferLibTest:testJoinWithConcat() (gas: 31407) DynamicBufferLibTest:testJoinWithDynamicBuffer() (gas: 11594) @@ -115,47 +115,47 @@ EIP712Test:testHashTypedDataWithChaindIdChange() (gas: 45785) EIP712Test:test__codesize() (gas: 9193) ERC1155HooksTest:testERC1155Hooks() (gas: 4412905) ERC1155HooksTest:test__codesize() (gas: 12143) -ERC1155Test:testApproveAll(address,bool) (runs: 256, μ: 44364, ~: 38849) +ERC1155Test:testApproveAll(address,bool) (runs: 256, μ: 44278, ~: 38848) ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 256, μ: 714, ~: 715) -ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 256, μ: 31155, ~: 33330) -ERC1155Test:testBatchBalanceOf(uint256) (runs: 256, μ: 109853, ~: 93598) -ERC1155Test:testBatchBurn(uint256) (runs: 256, μ: 172097, ~: 159457) -ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 170442, ~: 173684) -ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 43246, ~: 42599) -ERC1155Test:testBatchMintToEOA(uint256) (runs: 256, μ: 123138, ~: 100240) -ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 256, μ: 788563, ~: 790619) -ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 174132, ~: 185938) -ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 329023, ~: 315958) -ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 299093, ~: 318728) -ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 256, μ: 71191, ~: 64897) -ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 256, μ: 33400, ~: 35514) -ERC1155Test:testBurn(uint256) (runs: 256, μ: 90497, ~: 82341) -ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 97277, ~: 97737) +ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 256, μ: 31112, ~: 33322) +ERC1155Test:testBatchBalanceOf(uint256) (runs: 256, μ: 103316, ~: 93330) +ERC1155Test:testBatchBurn(uint256) (runs: 256, μ: 175289, ~: 161728) +ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 168936, ~: 173601) +ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 43093, ~: 42418) +ERC1155Test:testBatchMintToEOA(uint256) (runs: 256, μ: 120903, ~: 100119) +ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 256, μ: 789649, ~: 783115) +ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 176586, ~: 185948) +ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 330539, ~: 316189) +ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 296428, ~: 318706) +ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 256, μ: 74620, ~: 64966) +ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 256, μ: 33437, ~: 35514) +ERC1155Test:testBurn(uint256) (runs: 256, μ: 89676, ~: 82068) +ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 97234, ~: 97742) ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 256, μ: 21249, ~: 15497) -ERC1155Test:testMintToEOA(uint256) (runs: 256, μ: 72356, ~: 71726) -ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 256, μ: 671695, ~: 653967) -ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 256, μ: 103277, ~: 103244) -ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 256, μ: 281322, ~: 281372) -ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 256, μ: 235948, ~: 235943) -ERC1155Test:testMintToZeroReverts(uint256) (runs: 256, μ: 33088, ~: 33056) +ERC1155Test:testMintToEOA(uint256) (runs: 256, μ: 72145, ~: 71644) +ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 256, μ: 672414, ~: 653386) +ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 256, μ: 103279, ~: 103244) +ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 256, μ: 281321, ~: 281372) +ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 256, μ: 235883, ~: 235943) +ERC1155Test:testMintToZeroReverts(uint256) (runs: 256, μ: 33083, ~: 33055) ERC1155Test:testSafeBatchTransfer() (gas: 8345801) -ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 256, μ: 209448, ~: 189454) -ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 870854, ~: 888325) -ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 257938, ~: 268331) -ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 431334, ~: 446495) -ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 344982, ~: 330056) -ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 256, μ: 138601, ~: 124639) -ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 51180, ~: 66587) -ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 256, μ: 172468, ~: 173723) -ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 256, μ: 99125, ~: 99718) -ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 256, μ: 106042, ~: 105783) -ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 256, μ: 71336, ~: 72152) -ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 118894, ~: 111611) -ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 761852, ~: 782707) -ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 256, μ: 139812, ~: 139781) -ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 317096, ~: 318290) -ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 272879, ~: 272538) -ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 256, μ: 70876, ~: 70225) +ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 256, μ: 210288, ~: 189260) +ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 877943, ~: 888325) +ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 253145, ~: 268331) +ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 430553, ~: 446375) +ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 348178, ~: 330056) +ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 256, μ: 140700, ~: 124639) +ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 48866, ~: 66539) +ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 256, μ: 169524, ~: 173708) +ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 256, μ: 99402, ~: 99879) +ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 256, μ: 106084, ~: 105783) +ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 256, μ: 71281, ~: 72033) +ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 119253, ~: 111700) +ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 760559, ~: 781688) +ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 256, μ: 140275, ~: 139781) +ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 317076, ~: 318290) +ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 272930, ~: 272547) +ERC1155Test:testSafeTransferFromToZeroReverts(uint256) (runs: 256, μ: 70979, ~: 71380) ERC1155Test:test__codesize() (gas: 43539) ERC1967FactoryTest:testChangeAdmin() (gas: 266757) ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257684) @@ -173,45 +173,45 @@ ERC1967FactoryTest:testUpgradeAndCallWithRevert() (gas: 265922) ERC1967FactoryTest:testUpgradeUnauthorized() (gas: 271102) ERC1967FactoryTest:testUpgradeWithCorruptedProxy() (gas: 263440) ERC1967FactoryTest:test__codesize() (gas: 34001) -ERC20Invariants:invariantBalanceSum() (runs: 256, calls: 3840, reverts: 2335) +ERC20Invariants:invariantBalanceSum() (runs: 256, calls: 3840, reverts: 2415) ERC20Invariants:test__codesize() (gas: 8127) ERC20Test:testApprove() (gas: 35730) ERC20Test:testApprove(address,uint256) (runs: 256, μ: 30325, ~: 31181) ERC20Test:testBurn() (gas: 61920) -ERC20Test:testBurn(address,uint256,uint256) (runs: 256, μ: 58964, ~: 62469) -ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 54562, ~: 56410) -ERC20Test:testDecreaseAllowance(uint256,uint256) (runs: 256, μ: 66447, ~: 68676) -ERC20Test:testDirectSpendAllowance(uint256) (runs: 256, μ: 61657, ~: 61921) -ERC20Test:testDirectTransfer(uint256) (runs: 256, μ: 100359, ~: 111917) -ERC20Test:testIncreaseAllowance(uint256,uint256) (runs: 256, μ: 66304, ~: 67410) +ERC20Test:testBurn(address,uint256,uint256) (runs: 256, μ: 58963, ~: 62469) +ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 54556, ~: 56410) +ERC20Test:testDecreaseAllowance(uint256,uint256) (runs: 256, μ: 66526, ~: 68668) +ERC20Test:testDirectSpendAllowance(uint256) (runs: 256, μ: 61661, ~: 61925) +ERC20Test:testDirectTransfer(uint256) (runs: 256, μ: 100365, ~: 111917) +ERC20Test:testIncreaseAllowance(uint256,uint256) (runs: 256, μ: 66346, ~: 67410) ERC20Test:testInfiniteApproveTransferFrom() (gas: 89993) ERC20Test:testMetadata() (gas: 17599) ERC20Test:testMint() (gas: 58646) ERC20Test:testMint(address,uint256) (runs: 256, μ: 57179, ~: 58890) ERC20Test:testMintOverMaxUintReverts() (gas: 55753) ERC20Test:testPermit() (gas: 93411) -ERC20Test:testPermit(uint256) (runs: 256, μ: 93376, ~: 93388) -ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 256, μ: 65088, ~: 64991) -ERC20Test:testPermitBadNonceReverts(uint256) (runs: 256, μ: 65543, ~: 65498) -ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 256, μ: 39785, ~: 39777) -ERC20Test:testPermitReplayReverts(uint256) (runs: 256, μ: 97029, ~: 97020) +ERC20Test:testPermit(uint256) (runs: 256, μ: 93352, ~: 93380) +ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 256, μ: 65102, ~: 65129) +ERC20Test:testPermitBadNonceReverts(uint256) (runs: 256, μ: 65550, ~: 65499) +ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 256, μ: 39786, ~: 39775) +ERC20Test:testPermitReplayReverts(uint256) (runs: 256, μ: 96954, ~: 97020) ERC20Test:testTransfer() (gas: 65254) ERC20Test:testTransfer(address,uint256) (runs: 256, μ: 63824, ~: 65535) ERC20Test:testTransferFrom() (gas: 85616) -ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 256, μ: 89068, ~: 94824) +ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 256, μ: 89065, ~: 94824) ERC20Test:testTransferFromInsufficientAllowanceReverts() (gas: 81443) ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 256, μ: 81085, ~: 82006) ERC20Test:testTransferFromInsufficientBalanceReverts() (gas: 61880) ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 63829, ~: 62419) ERC20Test:testTransferInsufficientBalanceReverts() (gas: 55853) -ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 54364, ~: 56316) +ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 54518, ~: 56316) ERC20Test:test__codesize() (gas: 27193) ERC2981Test:testRoyaltyOverflowCheckDifferential(uint256,uint256) (runs: 256, μ: 456, ~: 458) ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 256, μ: 107226, ~: 104801) ERC2981Test:test__codesize() (gas: 8419) ERC4626Test:testDepositWithNoApprovalReverts() (gas: 16371) ERC4626Test:testDepositWithNotEnoughApprovalReverts() (gas: 89884) -ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 256, μ: 3348, ~: 3201) +ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 256, μ: 3347, ~: 3201) ERC4626Test:testMetadata() (gas: 15439) ERC4626Test:testMintWithNoApprovalReverts() (gas: 16345) ERC4626Test:testMintZero() (gas: 54317) @@ -219,7 +219,7 @@ ERC4626Test:testMultipleMintDepositRedeemWithdraw() (gas: 424481) ERC4626Test:testRedeemWithNoShareAmountReverts() (gas: 10940) ERC4626Test:testRedeemWithNotEnoughShareAmountReverts() (gas: 142937) ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 256, μ: 202613, ~: 202624) -ERC4626Test:testSingleMintRedeem(uint128) (runs: 256, μ: 201535, ~: 201545) +ERC4626Test:testSingleMintRedeem(uint128) (runs: 256, μ: 201534, ~: 201545) ERC4626Test:testTryGetAssetDecimals() (gas: 31906374) ERC4626Test:testUseVirtualShares() (gas: 2538479) ERC4626Test:testVaultInteractionsForSomeoneElse() (gas: 296154) @@ -230,52 +230,52 @@ ERC4626Test:testWithdrawZero() (gas: 52785) ERC4626Test:test__codesize() (gas: 40538) ERC721HooksTest:testERC721Hooks() (gas: 2881104) ERC721HooksTest:test__codesize() (gas: 9721) -ERC721Test:testApprove(uint256) (runs: 256, μ: 108105, ~: 108090) -ERC721Test:testApproveAll(uint256) (runs: 256, μ: 47719, ~: 40312) -ERC721Test:testApproveBurn(uint256) (runs: 256, μ: 86072, ~: 86073) -ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 256, μ: 33667, ~: 33621) -ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 256, μ: 83339, ~: 82569) -ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 256, μ: 751, ~: 756) -ERC721Test:testAux(uint256) (runs: 256, μ: 192137, ~: 193255) -ERC721Test:testBurn(uint256) (runs: 256, μ: 82242, ~: 93801) +ERC721Test:testApprove(uint256) (runs: 256, μ: 108090, ~: 108087) +ERC721Test:testApproveAll(uint256) (runs: 256, μ: 47330, ~: 40300) +ERC721Test:testApproveBurn(uint256) (runs: 256, μ: 86062, ~: 86076) +ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 256, μ: 33673, ~: 33704) +ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 256, μ: 83274, ~: 82409) +ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 256, μ: 752, ~: 756) +ERC721Test:testAux(uint256) (runs: 256, μ: 192187, ~: 193270) +ERC721Test:testBurn(uint256) (runs: 256, μ: 82445, ~: 93993) ERC721Test:testBurnNonExistentReverts(uint256) (runs: 256, μ: 10761, ~: 10761) ERC721Test:testCannotExceedMaxBalance() (gas: 149871) -ERC721Test:testDoubleBurnReverts(uint256) (runs: 256, μ: 63486, ~: 63434) -ERC721Test:testDoubleMintReverts(uint256) (runs: 256, μ: 79130, ~: 79167) -ERC721Test:testEverything(uint256) (runs: 256, μ: 306721, ~: 302202) -ERC721Test:testExtraData(uint256) (runs: 256, μ: 99110, ~: 99192) +ERC721Test:testDoubleBurnReverts(uint256) (runs: 256, μ: 63492, ~: 63434) +ERC721Test:testDoubleMintReverts(uint256) (runs: 256, μ: 79138, ~: 79168) +ERC721Test:testEverything(uint256) (runs: 256, μ: 310677, ~: 302890) +ERC721Test:testExtraData(uint256) (runs: 256, μ: 99067, ~: 99167) ERC721Test:testExtraData2(uint256,uint256) (runs: 256, μ: 54254, ~: 53903) -ERC721Test:testIsApprovedOrOwner(uint256) (runs: 256, μ: 134768, ~: 134792) -ERC721Test:testMint(uint256) (runs: 256, μ: 82877, ~: 82917) +ERC721Test:testIsApprovedOrOwner(uint256) (runs: 256, μ: 134756, ~: 134780) +ERC721Test:testMint(uint256) (runs: 256, μ: 82883, ~: 82917) ERC721Test:testMintToZeroReverts(uint256) (runs: 256, μ: 8686, ~: 8686) -ERC721Test:testOwnerOfNonExistent(uint256) (runs: 256, μ: 33383, ~: 33338) -ERC721Test:testSafeMintToEOA(uint256) (runs: 256, μ: 83470, ~: 83495) -ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 256, μ: 408814, ~: 409920) -ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 472847, ~: 461472) +ERC721Test:testOwnerOfNonExistent(uint256) (runs: 256, μ: 33382, ~: 33338) +ERC721Test:testSafeMintToEOA(uint256) (runs: 256, μ: 83478, ~: 83517) +ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 256, μ: 408810, ~: 409920) +ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 472860, ~: 461481) ERC721Test:testSafeMintToERC721RecipientWithWrongReturnData(uint256) (runs: 256, μ: 170009, ~: 170009) ERC721Test:testSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256,bytes) (runs: 256, μ: 170828, ~: 170820) ERC721Test:testSafeMintToNonERC721RecipientReverts(uint256) (runs: 256, μ: 100481, ~: 100481) ERC721Test:testSafeMintToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 101333, ~: 101324) ERC721Test:testSafeMintToRevertingERC721RecipientReverts(uint256) (runs: 256, μ: 202928, ~: 202928) ERC721Test:testSafeMintToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 203768, ~: 203760) -ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 121917, ~: 122068) -ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 256, μ: 470301, ~: 471430) -ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 534722, ~: 523332) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 256, μ: 200854, ~: 200906) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 256, μ: 202072, ~: 202065) -ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 256, μ: 131269, ~: 131210) -ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 132565, ~: 132566) -ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 256, μ: 233729, ~: 233779) -ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 235013, ~: 235005) +ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 121927, ~: 122064) +ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 256, μ: 470311, ~: 471432) +ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 534743, ~: 523346) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 256, μ: 200858, ~: 200910) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 256, μ: 202077, ~: 202065) +ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 256, μ: 131273, ~: 131210) +ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 132572, ~: 132566) +ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 256, μ: 233723, ~: 233654) +ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 235010, ~: 235005) ERC721Test:testSafetyOfCustomStorage(uint256,uint256) (runs: 256, μ: 1063, ~: 713) ERC721Test:testTransferFrom() (gas: 85746) -ERC721Test:testTransferFrom(uint256) (runs: 256, μ: 114053, ~: 112504) -ERC721Test:testTransferFromApproveAll(uint256) (runs: 256, μ: 119332, ~: 119289) -ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 256, μ: 34008, ~: 33992) -ERC721Test:testTransferFromNotOwner(uint256) (runs: 256, μ: 84704, ~: 84680) -ERC721Test:testTransferFromSelf(uint256) (runs: 256, μ: 92791, ~: 92779) -ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 256, μ: 79045, ~: 79024) -ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 256, μ: 80448, ~: 80415) +ERC721Test:testTransferFrom(uint256) (runs: 256, μ: 114029, ~: 112504) +ERC721Test:testTransferFromApproveAll(uint256) (runs: 256, μ: 119344, ~: 119349) +ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 256, μ: 34011, ~: 33992) +ERC721Test:testTransferFromNotOwner(uint256) (runs: 256, μ: 84714, ~: 84681) +ERC721Test:testTransferFromSelf(uint256) (runs: 256, μ: 92799, ~: 92817) +ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 256, μ: 79044, ~: 79024) +ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 256, μ: 80452, ~: 80405) ERC721Test:test__codesize() (gas: 42215) FixedPointMathLibTest:testAbs() (gas: 600) FixedPointMathLibTest:testAbs(int256) (runs: 256, μ: 471, ~: 440) @@ -411,13 +411,13 @@ LibBitmapTest:test__codesize() (gas: 8161) LibCloneTest:testClone() (gas: 52963) LibCloneTest:testClone(uint256) (runs: 256, μ: 71288, ~: 72921) LibCloneTest:testCloneDeteministicWithImmutableArgs() (gas: 803713) -LibCloneTest:testCloneDeteministicWithImmutableArgs(address,uint256,uint256[],bytes,uint64,uint8,uint256) (runs: 256, μ: 1866727, ~: 1795756) +LibCloneTest:testCloneDeteministicWithImmutableArgs(address,uint256,uint256[],bytes,uint64,uint8,uint256) (runs: 256, μ: 1812111, ~: 1782776) LibCloneTest:testCloneDeterministic() (gas: 76781) LibCloneTest:testCloneDeterministic(uint256,bytes32) (runs: 256, μ: 95349, ~: 96670) LibCloneTest:testCloneDeterministicRevertsIfAddressAlreadyUsed() (gas: 96882220) LibCloneTest:testCloneWithImmutableArgs() (gas: 711204) -LibCloneTest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 256, μ: 1760088, ~: 1682138) -LibCloneTest:testStartsWithCaller(uint256) (runs: 256, μ: 28156, ~: 28404) +LibCloneTest:testCloneWithImmutableArgs(uint256,address,uint256,uint256[],uint64,uint8) (runs: 256, μ: 1761375, ~: 1689727) +LibCloneTest:testStartsWithCaller(uint256) (runs: 256, μ: 28188, ~: 28404) LibCloneTest:test__codesize() (gas: 15496) LibMapTest:testMapGetFromBigArray() (gas: 3264) LibMapTest:testMapGetUint8() (gas: 3357) @@ -600,28 +600,29 @@ LibStringTest:testToStringZeroBrutalized() (gas: 567139) LibStringTest:testToStringZeroRightPadded(uint256) (runs: 256, μ: 750877, ~: 567247) LibStringTest:test__codesize() (gas: 38503) LibZipTest:testCdCompress() (gas: 164552) -LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 787554, ~: 637659) -LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 757170, ~: 691986) +LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 742891, ~: 636229) +LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 783880, ~: 694883) LibZipTest:testCdFallback() (gas: 5726590) -LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1258834, ~: 1044926) -LibZipTest:testDecompressWontRevert(bytes) (runs: 256, μ: 727550, ~: 617433) +LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1225958, ~: 1040371) +LibZipTest:testDecompressWontRevert(bytes) (runs: 256, μ: 741987, ~: 620247) LibZipTest:testFlzCompressDecompress() (gas: 2106856) -LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 792915, ~: 669659) +LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 824846, ~: 669659) LibZipTest:testFlzCompressDecompress2() (gas: 989036) LibZipTest:test__codesize() (gas: 20646) -MerkleProofLibTest:testEmptyCalldataHelpers() (gas: 1043) -MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 256, μ: 731072, ~: 629177) -MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 256, μ: 33429, ~: 32417) -MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 256, μ: 6604, ~: 6645) -MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 256, μ: 811789, ~: 781355) -MerkleProofLibTest:testVerifyMultiProofIsInvalid() (gas: 627544) -MerkleProofLibTest:testVerifyMultiProofIsValid() (gas: 628748) -MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 256, μ: 901782, ~: 777246) -MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 256, μ: 3978, ~: 3891) -MerkleProofLibTest:testVerifyProofBasicCaseIsInvalid() (gas: 3625) -MerkleProofLibTest:testVerifyProofBasicCaseIsValid() (gas: 3589) -MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 256, μ: 2568, ~: 2392) -MerkleProofLibTest:test__codesize() (gas: 11355) +MerkleProofLibTest:testEmptyCalldataHelpers() (gas: 1086) +MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 256, μ: 733773, ~: 630520) +MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 256, μ: 33434, ~: 32418) +MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 256, μ: 6679, ~: 6754) +MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 256, μ: 809332, ~: 781482) +MerkleProofLibTest:testVerifyMultiProofIsInvalid() (gas: 628637) +MerkleProofLibTest:testVerifyMultiProofIsValid() (gas: 630155) +MerkleProofLibTest:testVerifyMultiProofMalicious() (gas: 8041) +MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 256, μ: 854318, ~: 767794) +MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 256, μ: 4005, ~: 3913) +MerkleProofLibTest:testVerifyProofBasicCaseIsInvalid() (gas: 3581) +MerkleProofLibTest:testVerifyProofBasicCaseIsValid() (gas: 3590) +MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 256, μ: 2569, ~: 2393) +MerkleProofLibTest:test__codesize() (gas: 12125) MinHeapLibTest:testHeapEnqueue(uint256) (runs: 256, μ: 188197, ~: 181590) MinHeapLibTest:testHeapEnqueueGas(uint256) (runs: 256, μ: 293373, ~: 293389) MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 256, μ: 106483, ~: 99702) @@ -641,7 +642,7 @@ MulticallableTest:testMulticallableRevertWithMessage(string) (runs: 256, μ: 126 MulticallableTest:testMulticallableRevertWithNothing() (gas: 10155) MulticallableTest:testMulticallableWithNoData() (gas: 6322) MulticallableTest:test__codesize() (gas: 9792) -OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 256, μ: 37412, ~: 40296) +OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 256, μ: 37461, ~: 40296) OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 256, μ: 19253, ~: 12176) OwnableRolesTest:testGrantRoles() (gas: 36053) OwnableRolesTest:testHandoverOwnership() (gas: 32442) @@ -655,11 +656,11 @@ OwnableRolesTest:testHasAnyRole(address,uint256,uint256) (runs: 256, μ: 32322, OwnableRolesTest:testInitializeOwnerDirect() (gas: 16724) OwnableRolesTest:testOnlyOwnerModifier(address,bool) (runs: 256, μ: 17368, ~: 11530) OwnableRolesTest:testOnlyOwnerOrRolesModifier() (gas: 36491) -OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 256, μ: 54218, ~: 58448) -OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 256, μ: 52638, ~: 57820) -OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 256, μ: 55034, ~: 58291) +OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 256, μ: 54220, ~: 58448) +OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 256, μ: 52468, ~: 57820) +OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 256, μ: 54774, ~: 58291) OwnableRolesTest:testOrdinalsFromRoles() (gas: 3609091) -OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 256, μ: 70054, ~: 34735) +OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 256, μ: 70368, ~: 34735) OwnableRolesTest:testOwnershipHandoverValidForDefaultValue() (gas: 5803) OwnableRolesTest:testRenounceOwnership() (gas: 12899) OwnableRolesTest:testRolesFromOrdinals() (gas: 649957) @@ -670,19 +671,19 @@ OwnableRolesTest:testTransferOwnership() (gas: 19722) OwnableRolesTest:testTransferOwnership(address,bool,bool) (runs: 256, μ: 13912, ~: 13117) OwnableRolesTest:test__codesize() (gas: 21118) OwnableTest:testHandoverOwnership() (gas: 32155) -OwnableTest:testHandoverOwnership(address) (runs: 256, μ: 32174, ~: 32164) +OwnableTest:testHandoverOwnership(address) (runs: 256, μ: 32175, ~: 32164) OwnableTest:testHandoverOwnershipAfterExpiration() (gas: 36745) OwnableTest:testHandoverOwnershipBeforeExpiration() (gas: 28598) OwnableTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35489) OwnableTest:testHandoverOwnershipWithCancellation() (gas: 30400) OwnableTest:testInitializeOwnerDirect() (gas: 16599) -OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 256, μ: 17348, ~: 11408) +OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 256, μ: 17432, ~: 11408) OwnableTest:testOwnershipHandoverValidForDefaultValue() (gas: 5780) OwnableTest:testRenounceOwnership() (gas: 12799) OwnableTest:testSetOwnerDirect() (gas: 17664) OwnableTest:testSetOwnerDirect(address) (runs: 256, μ: 17812, ~: 17812) OwnableTest:testTransferOwnership() (gas: 19445) -OwnableTest:testTransferOwnership(address,bool,bool) (runs: 256, μ: 13627, ~: 12851) +OwnableTest:testTransferOwnership(address,bool,bool) (runs: 256, μ: 13659, ~: 12851) OwnableTest:test__codesize() (gas: 10783) RedBlackTreeLibTest:testRedBlackTreeBenchUint160() (gas: 3438446) RedBlackTreeLibTest:testRedBlackTreeBenchUint256() (gas: 5850739) @@ -732,12 +733,12 @@ SafeCastLibTest:testSafeCastToUint() (gas: 10560) SafeCastLibTest:testSafeCastToUint(uint256) (runs: 256, μ: 4134, ~: 3351) SafeCastLibTest:testSafeCastToUintBench() (gas: 326306) SafeCastLibTest:test__codesize() (gas: 15816) -SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 256, μ: 108359, ~: 123497) +SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 256, μ: 106348, ~: 123396) SafeTransferLibTest:testApproveWithMissingReturn() (gas: 31988) SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 256, μ: 31292, ~: 32148) SafeTransferLibTest:testApproveWithNonContract() (gas: 2990) SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 256, μ: 3513, ~: 3536) -SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 256, μ: 80048, ~: 91619) +SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 256, μ: 79549, ~: 70468) SafeTransferLibTest:testApproveWithReturnsFalseReverts() (gas: 9559) SafeTransferLibTest:testApproveWithReturnsFalseReverts(address,uint256) (runs: 256, μ: 9697, ~: 9697) SafeTransferLibTest:testApproveWithReturnsTooLittleReverts() (gas: 9441) @@ -752,55 +753,55 @@ SafeTransferLibTest:testApproveWithStandardERC20(address,uint256) (runs: 256, μ SafeTransferLibTest:testBalanceOfStandardERC20() (gas: 7831) SafeTransferLibTest:testBalanceOfStandardERC20(address,uint256) (runs: 256, μ: 39433, ~: 40349) SafeTransferLibTest:testForceTransferETHToGriever() (gas: 1511470) -SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 256, μ: 529284, ~: 570876) +SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 256, μ: 528522, ~: 570876) SafeTransferLibTest:testTransferAllFromWithStandardERC20() (gas: 33092) -SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 56463, ~: 56468) +SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 56463, ~: 56469) SafeTransferLibTest:testTransferAllWithStandardERC20() (gas: 30647) SafeTransferLibTest:testTransferAllWithStandardERC20(address,uint256) (runs: 256, μ: 42004, ~: 42004) SafeTransferLibTest:testTransferETH() (gas: 34646) -SafeTransferLibTest:testTransferETH(address,uint256) (runs: 256, μ: 32672, ~: 35230) +SafeTransferLibTest:testTransferETH(address,uint256) (runs: 256, μ: 32800, ~: 35230) SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts() (gas: 10782) SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 256, μ: 10491, ~: 10874) -SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 256, μ: 857611, ~: 783468) +SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 256, μ: 877089, ~: 772300) SafeTransferLibTest:testTransferFromWithMissingReturn() (gas: 657870) -SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 256, μ: 785305, ~: 657344) +SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 256, μ: 761578, ~: 657341) SafeTransferLibTest:testTransferFromWithNonContract() (gas: 3000) -SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 256, μ: 3654, ~: 3691) -SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 256, μ: 791884, ~: 705425) +SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 256, μ: 3620, ~: 3691) +SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 256, μ: 752734, ~: 707384) SafeTransferLibTest:testTransferFromWithReturnsFalseReverts() (gas: 622702) -SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 256, μ: 674784, ~: 623123) +SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 256, μ: 677479, ~: 623123) SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts() (gas: 622890) -SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 256, μ: 801324, ~: 622998) +SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 256, μ: 760564, ~: 622989) SafeTransferLibTest:testTransferFromWithReturnsTooMuch() (gas: 657620) -SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 256, μ: 785326, ~: 658178) -SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 256, μ: 755357, ~: 623107) +SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 256, μ: 776750, ~: 658232) +SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 256, μ: 778998, ~: 623107) SafeTransferLibTest:testTransferFromWithRevertingReverts() (gas: 616523) -SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 256, μ: 737756, ~: 616434) +SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 256, μ: 703898, ~: 616434) SafeTransferLibTest:testTransferFromWithStandardERC20() (gas: 655320) -SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 689022, ~: 655024) -SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 256, μ: 877888, ~: 735513) +SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 697510, ~: 655070) +SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 256, μ: 837604, ~: 735185) SafeTransferLibTest:testTransferWithMissingReturn() (gas: 643198) -SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 256, μ: 713828, ~: 643789) +SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 256, μ: 715686, ~: 643771) SafeTransferLibTest:testTransferWithNonContract() (gas: 2966) SafeTransferLibTest:testTransferWithNonContract(address,address,uint256) (runs: 256, μ: 3534, ~: 3557) -SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 256, μ: 807202, ~: 690821) +SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 256, μ: 780846, ~: 671349) SafeTransferLibTest:testTransferWithReturnsFalseReverts() (gas: 619750) -SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 256, μ: 736298, ~: 620243) +SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 256, μ: 766310, ~: 620243) SafeTransferLibTest:testTransferWithReturnsTooLittleReverts() (gas: 620381) -SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 256, μ: 758198, ~: 620144) +SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 256, μ: 754757, ~: 620144) SafeTransferLibTest:testTransferWithReturnsTooMuch() (gas: 643694) -SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 256, μ: 752240, ~: 644228) -SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 256, μ: 719489, ~: 620155) +SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 256, μ: 756603, ~: 644180) +SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 256, μ: 710975, ~: 620221) SafeTransferLibTest:testTransferWithRevertingReverts() (gas: 619642) -SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 256, μ: 752480, ~: 620156) +SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 256, μ: 757065, ~: 620180) SafeTransferLibTest:testTransferWithStandardERC20() (gas: 644246) -SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 256, μ: 697750, ~: 643897) +SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 256, μ: 672590, ~: 643921) SafeTransferLibTest:testTryTransferETH() (gas: 148725) SafeTransferLibTest:testTryTransferETHWithNoGrief() (gas: 537110) SafeTransferLibTest:testTryTransferETHWithNoStorageWrites() (gas: 192502) SafeTransferLibTest:test__codesize() (gas: 32510) SignatureCheckerLibTest:testEmptyCalldataHelpers() (gas: 3829) -SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 256, μ: 57068, ~: 52618) +SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 256, μ: 55782, ~: 50186) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSignature() (gas: 21438) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSigner() (gas: 30938) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithMatchingSignerAndSignature() (gas: 17860) @@ -814,15 +815,15 @@ SignatureCheckerLibTest:testSignatureCheckerOnWalletWithZeroAddressSigner() (gas SignatureCheckerLibTest:test__codesize() (gas: 9057) SoladyTest:test__codesize() (gas: 1102) TestPlus:test__codesize() (gas: 406) -WETHInvariants:invariantTotalSupplyEqualsBalance() (runs: 256, calls: 3840, reverts: 1953) +WETHInvariants:invariantTotalSupplyEqualsBalance() (runs: 256, calls: 3840, reverts: 1862) WETHInvariants:test__codesize() (gas: 6297) WETHTest:testDeposit() (gas: 68090) -WETHTest:testDeposit(uint256) (runs: 256, μ: 65174, ~: 68384) +WETHTest:testDeposit(uint256) (runs: 256, μ: 65537, ~: 68384) WETHTest:testFallbackDeposit() (gas: 67798) -WETHTest:testFallbackDeposit(uint256) (runs: 256, μ: 64837, ~: 68047) +WETHTest:testFallbackDeposit(uint256) (runs: 256, μ: 65200, ~: 68047) WETHTest:testMetadata() (gas: 10070) WETHTest:testPartialWithdraw() (gas: 79546) WETHTest:testWithdraw() (gas: 59316) -WETHTest:testWithdraw(uint256,uint256) (runs: 256, μ: 76633, ~: 80306) +WETHTest:testWithdraw(uint256,uint256) (runs: 256, μ: 75881, ~: 80306) WETHTest:testWithdrawToContractWithoutReceiveReverts() (gas: 93907) WETHTest:test__codesize() (gas: 11369) \ No newline at end of file diff --git a/src/tokens/ERC1155.sol b/src/tokens/ERC1155.sol index ef16548b7..e94dac0fe 100644 --- a/src/tokens/ERC1155.sol +++ b/src/tokens/ERC1155.sol @@ -5,7 +5,8 @@ pragma solidity ^0.8.4; /// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC1155.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol) /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC1155/ERC1155.sol) -/// Note: +/// +/// @dev Note: /// The ERC1155 standard allows for self-approvals. /// For performance, this implementation WILL NOT revert for such actions. /// Please add any checks with overrides if desired. diff --git a/src/tokens/ERC20.sol b/src/tokens/ERC20.sol index 1043fd954..9647b2193 100644 --- a/src/tokens/ERC20.sol +++ b/src/tokens/ERC20.sol @@ -5,7 +5,8 @@ pragma solidity ^0.8.4; /// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) -/// Note: +/// +/// @dev Note: /// The ERC20 standard allows minting and transferring to and from the zero address, /// minting and transferring zero tokens, as well as self-approvals. /// For performance, this implementation WILL NOT revert for such actions. @@ -251,7 +252,7 @@ abstract contract ERC20 { /// @dev Transfers `amount` tokens from `from` to `to`. /// - /// Note: does not update the allowance if it is the maximum uint256 value. + /// Note: Does not update the allowance if it is the maximum uint256 value. /// /// Requirements: /// - `from` must at least have `amount`. diff --git a/src/tokens/ERC721.sol b/src/tokens/ERC721.sol index d76a0f19f..042c4c3d8 100644 --- a/src/tokens/ERC721.sol +++ b/src/tokens/ERC721.sol @@ -5,7 +5,8 @@ pragma solidity ^0.8.4; /// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC721.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol) /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC721/ERC721.sol) -/// Note: +/// +/// @dev Note: /// The ERC721 standard allows for self-approvals. /// For performance, this implementation WILL NOT revert for such actions. /// Please add any checks with overrides if desired. @@ -399,7 +400,7 @@ abstract contract ERC721 { /// @dev Returns the extra data for token `id`. /// Minting, transferring, burning a token will not change the extra data. - /// The extra data can be set on a non existent token. + /// The extra data can be set on a non-existent token. function _getExtraData(uint256 id) internal view virtual returns (uint96 result) { /// @solidity memory-safe-assembly assembly { @@ -411,7 +412,7 @@ abstract contract ERC721 { /// @dev Sets the extra data for token `id` to `value`. /// Minting, transferring, burning a token will not change the extra data. - /// The extra data can be set on a non existent token. + /// The extra data can be set on a non-existent token. function _setExtraData(uint256 id, uint96 value) internal virtual { /// @solidity memory-safe-assembly assembly { diff --git a/src/utils/LibZip.sol b/src/utils/LibZip.sol index 6c94c1b12..9edf329e3 100644 --- a/src/utils/LibZip.sol +++ b/src/utils/LibZip.sol @@ -5,7 +5,8 @@ pragma solidity ^0.8.4; /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibZip.sol) /// @author Calldata compression by clabby (https://github.com/clabby/op-kompressor) /// @author FastLZ by ariya (https://github.com/ariya/FastLZ) -/// Note: +/// +/// @dev Note: /// The accompanying solady.js library includes implementations of /// FastLZ and calldata operations for convenience. library LibZip { diff --git a/src/utils/SafeTransferLib.sol b/src/utils/SafeTransferLib.sol index 0c6503d97..200d10418 100644 --- a/src/utils/SafeTransferLib.sol +++ b/src/utils/SafeTransferLib.sol @@ -4,7 +4,11 @@ pragma solidity ^0.8.4; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) -/// @dev Caution! This library won't check that a token has code, responsibility is delegated to the caller. +/// +/// @dev Note: +/// - For ETH transfers, please use `forceSafeTransferETH` for gas griefing protection. +/// - For ERC20s, this implementation won't check that a token has code, +/// responsibility is delegated to the caller. library SafeTransferLib { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ @@ -41,6 +45,9 @@ library SafeTransferLib { /// @dev Sends `amount` (in wei) ETH to `to`. /// Reverts upon failure. + /// + /// Note: This implementation does NOT protect against gas griefing. + /// Please use `forceSafeTransferETH` for gas griefing protection. function safeTransferETH(address to, uint256 amount) internal { /// @solidity memory-safe-assembly assembly { @@ -211,7 +218,7 @@ library SafeTransferLib { // Store the function selector of `transferFrom(address,address,uint256)`. mstore(0x00, 0x23b872dd) - // The `amount` argument is already written to the memory word at 0x6c. + // The `amount` argument is already written to the memory word at 0x60. amount := mload(0x60) if iszero( diff --git a/src/utils/SignatureCheckerLib.sol b/src/utils/SignatureCheckerLib.sol index 0eebae883..355fa9744 100644 --- a/src/utils/SignatureCheckerLib.sol +++ b/src/utils/SignatureCheckerLib.sol @@ -6,7 +6,7 @@ pragma solidity ^0.8.4; /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SignatureCheckerLib.sol) /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/SignatureChecker.sol) /// -/// Note: unlike ECDSA signatures, contract signatures are revocable. +/// @dev Note: Unlike ECDSA signatures, contract signatures are revocable. library SignatureCheckerLib { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CONSTANTS */