Skip to content

Commit

Permalink
Optimize
Browse files Browse the repository at this point in the history
  • Loading branch information
Vectorized committed May 16, 2024
1 parent b0e5399 commit 57a8c94
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 35 deletions.
58 changes: 29 additions & 29 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,9 @@ ERC1271Test:test__codesize() (gas: 30379)
ERC1967FactoryTest:testChangeAdmin() (gas: 266356)
ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257316)
ERC1967FactoryTest:testDeploy() (gas: 257375)
ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 276, μ: 339314, ~: 340931)
ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 276, μ: 339313, ~: 340930)
ERC1967FactoryTest:testDeployAndCallWithRevert() (gas: 211881)
ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 276, μ: 95821, ~: 44128)
ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 276, μ: 96573, ~: 44131)
ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 276, μ: 318052, ~: 350141)
ERC1967FactoryTest:testFactoryDeployment() (gas: 494435)
ERC1967FactoryTest:testProxyFails() (gas: 259019)
Expand Down Expand Up @@ -243,7 +243,7 @@ ERC4337Test:testDisableInitializerForImplementation() (gas: 1320597)
ERC4337Test:testETHReceived() (gas: 16584)
ERC4337Test:testExecute() (gas: 382808)
ERC4337Test:testExecuteBatch() (gas: 692731)
ERC4337Test:testExecuteBatch(uint256) (runs: 276, μ: 541588, ~: 669054)
ERC4337Test:testExecuteBatch(uint256) (runs: 276, μ: 543820, ~: 669063)
ERC4337Test:testInitializer() (gas: 285472)
ERC4337Test:testIsValidSignature() (gas: 119651)
ERC4337Test:testIsValidSignaturePersonalSign() (gas: 102966)
Expand Down Expand Up @@ -276,19 +276,19 @@ ERC4626Test:testWithdrawZero() (gas: 51874)
ERC4626Test:test__codesize() (gas: 37177)
ERC6551Test:testBaseFeeMini() (gas: 39514)
ERC6551Test:testCdFallback() (gas: 894982)
ERC6551Test:testDeployERC6551(uint256) (runs: 276, μ: 170673, ~: 168890)
ERC6551Test:testDeployERC6551(uint256) (runs: 276, μ: 170622, ~: 168890)
ERC6551Test:testDeployERC6551Proxy() (gas: 80395)
ERC6551Test:testExecute() (gas: 506735)
ERC6551Test:testExecuteBatch() (gas: 816151)
ERC6551Test:testExecuteBatch(uint256) (runs: 276, μ: 620668, ~: 482714)
ERC6551Test:testExecuteBatch(uint256) (runs: 276, μ: 621703, ~: 482714)
ERC6551Test:testInitializeERC6551ProxyImplementation() (gas: 189914)
ERC6551Test:testIsValidSigner(address) (runs: 276, μ: 167491, ~: 167474)
ERC6551Test:testOnERC1155BatchReceived() (gas: 1697916)
ERC6551Test:testOnERC1155Received() (gas: 1695271)
ERC6551Test:testOnERC721Received() (gas: 1738609)
ERC6551Test:testOnERC721ReceivedCycles() (gas: 1727948)
ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 276, μ: 450433, ~: 455366)
ERC6551Test:testOwnerWorksWithChainIdChange(uint256,uint256) (runs: 276, μ: 1363687, ~: 1363678)
ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 276, μ: 450422, ~: 455366)
ERC6551Test:testOwnerWorksWithChainIdChange(uint256,uint256) (runs: 276, μ: 1363686, ~: 1363678)
ERC6551Test:testSupportsInterface() (gas: 169450)
ERC6551Test:testUpdateState(uint256) (runs: 276, μ: 235179, ~: 235121)
ERC6551Test:testUpgrade() (gas: 248420)
Expand Down Expand Up @@ -428,7 +428,7 @@ FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 276, μ:
FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase1() (gas: 3697)
FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase2() (gas: 3730)
FixedPointMathLibTest:testGcd() (gas: 4228)
FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 276, μ: 6833, ~: 2800)
FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 276, μ: 6831, ~: 2800)
FixedPointMathLibTest:testLambertW0WadAccuracy() (gas: 7164)
FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 276, μ: 2331, ~: 408)
FixedPointMathLibTest:testLambertW0WadKnownValues() (gas: 1689664)
Expand All @@ -450,11 +450,11 @@ FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3340)
FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3315)
FixedPointMathLibTest:testLnWadSmall() (gas: 2708)
FixedPointMathLibTest:testLog10() (gas: 76168)
FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 276, μ: 2188, ~: 2210)
FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 276, μ: 2188, ~: 2209)
FixedPointMathLibTest:testLog10Up() (gas: 4369)
FixedPointMathLibTest:testLog2() (gas: 243209)
FixedPointMathLibTest:testLog256() (gas: 22831)
FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 276, μ: 2115, ~: 2173)
FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 276, μ: 2116, ~: 2173)
FixedPointMathLibTest:testLog256Up() (gas: 1271)
FixedPointMathLibTest:testLog2Differential(uint256) (runs: 276, μ: 890, ~: 886)
FixedPointMathLibTest:testLog2Up() (gas: 297302)
Expand All @@ -467,15 +467,15 @@ FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 276, μ: 475, ~: 480)
FixedPointMathLibTest:testMulDiv() (gas: 1845)
FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 276, μ: 723, ~: 836)
FixedPointMathLibTest:testMulDivEdgeCases() (gas: 784)
FixedPointMathLibTest:testMulDivOverflowReverts(uint256,uint256,uint256) (runs: 261, μ: 3854, ~: 3854)
FixedPointMathLibTest:testMulDivOverflowReverts(uint256,uint256,uint256) (runs: 261, μ: 3857, ~: 3857)
FixedPointMathLibTest:testMulDivUp() (gas: 2125)
FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 276, μ: 923, ~: 1143)
FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 817)
FixedPointMathLibTest:testMulDivUpOverflowReverts(uint256,uint256,uint256) (runs: 261, μ: 3855, ~: 3855)
FixedPointMathLibTest:testMulDivUpZeroDenominator() (gas: 3253)
FixedPointMathLibTest:testMulDivUpZeroDenominatorReverts(uint256,uint256) (runs: 276, μ: 3354, ~: 3354)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts() (gas: 3252)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts(uint256,uint256) (runs: 276, μ: 3355, ~: 3355)
FixedPointMathLibTest:testMulDivUpOverflowReverts(uint256,uint256,uint256) (runs: 261, μ: 3858, ~: 3858)
FixedPointMathLibTest:testMulDivUpZeroDenominator() (gas: 3256)
FixedPointMathLibTest:testMulDivUpZeroDenominatorReverts(uint256,uint256) (runs: 276, μ: 3357, ~: 3357)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts() (gas: 3255)
FixedPointMathLibTest:testMulDivZeroDenominatorReverts(uint256,uint256) (runs: 276, μ: 3358, ~: 3358)
FixedPointMathLibTest:testMulWad() (gas: 736)
FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 276, μ: 728, ~: 854)
FixedPointMathLibTest:testMulWadEdgeCases() (gas: 714)
Expand All @@ -485,7 +485,7 @@ FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 276, μ: 876, ~: 1065
FixedPointMathLibTest:testMulWadUpEdgeCases() (gas: 815)
FixedPointMathLibTest:testMulWadUpOverflowReverts(uint256,uint256) (runs: 261, μ: 3834, ~: 3834)
FixedPointMathLibTest:testPackUnpackSci() (gas: 129349)
FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 276, μ: 30189, ~: 30182)
FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 276, μ: 30188, ~: 30182)
FixedPointMathLibTest:testRPow() (gas: 3320)
FixedPointMathLibTest:testRPowOverflowReverts() (gas: 4974)
FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 276, μ: 440, ~: 440)
Expand Down Expand Up @@ -517,13 +517,13 @@ FixedPointMathLibTest:testSci2(uint256) (runs: 276, μ: 960, ~: 955)
FixedPointMathLibTest:testSqrt() (gas: 42598)
FixedPointMathLibTest:testSqrt(uint256) (runs: 276, μ: 1060, ~: 1064)
FixedPointMathLibTest:testSqrtBack(uint256) (runs: 276, μ: 9608, ~: 341)
FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 276, μ: 53176, ~: 53571)
FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 276, μ: 53172, ~: 53571)
FixedPointMathLibTest:testSqrtHashedSingle() (gas: 53063)
FixedPointMathLibTest:testSqrtWad() (gas: 7426)
FixedPointMathLibTest:testSqrtWad(uint256) (runs: 276, μ: 1560, ~: 1565)
FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 276, μ: 548, ~: 548)
FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 276, μ: 882, ~: 882)
FixedPointMathLibTest:test__codesize() (gas: 42984)
FixedPointMathLibTest:test__codesize() (gas: 42975)
GasBurnerLibTest:testBurnGas() (gas: 1700805)
GasBurnerLibTest:test__codesize() (gas: 1189)
InitializableTest:testDisableInitializers() (gas: 42000)
Expand Down Expand Up @@ -692,12 +692,12 @@ LibPRNGTest:testLCGGas() (gas: 20803)
LibPRNGTest:testLazyShufflerGet() (gas: 298258)
LibPRNGTest:testLazyShufflerGetOutOfBoundsReverts(uint256,uint256) (runs: 276, μ: 26539, ~: 26497)
LibPRNGTest:testLazyShufflerNoStorageCollisions() (gas: 266085)
LibPRNGTest:testLazyShufflerProducesShuffledRange(uint256) (runs: 276, μ: 168346, ~: 89443)
LibPRNGTest:testLazyShufflerProducesShuffledRange(uint256) (runs: 276, μ: 168287, ~: 89356)
LibPRNGTest:testLazyShufflerProducesShuffledRange2() (gas: 8971724)
LibPRNGTest:testLazyShufflerProducesShuffledRangeWithGrow(uint256,uint256) (runs: 276, μ: 186890, ~: 176631)
LibPRNGTest:testLazyShufflerRestart() (gas: 274632)
LibPRNGTest:testLazyShufflerRevertsOnDoubleInit() (gas: 26779)
LibPRNGTest:testLazyShufflerRevertsOnFinshedNext(uint256) (runs: 276, μ: 63897, ~: 56825)
LibPRNGTest:testLazyShufflerRevertsOnFinshedNext(uint256) (runs: 276, μ: 63890, ~: 56825)
LibPRNGTest:testLazyShufflerRevertsOnGrowWithInvalidLength(uint256,uint256) (runs: 276, μ: 24695, ~: 24783)
LibPRNGTest:testLazyShufflerRevertsOnInitWithInvalidLength(uint256) (runs: 276, μ: 23240, ~: 23680)
LibPRNGTest:testLazyShufflerRevertsOnZeroLengthNext() (gas: 27843)
Expand Down Expand Up @@ -1070,7 +1070,7 @@ SafeCastLibTest:testSafeCastUint256ToIntBench() (gas: 330222)
SafeCastLibTest:testSafeCastUint256ToUintBench() (gas: 326262)
SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 276, μ: 19307, ~: 24926)
SafeCastLibTest:test__codesize() (gas: 23270)
SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 276, μ: 110039, ~: 123604)
SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 276, μ: 109886, ~: 123604)
SafeTransferLibTest:testApproveWithMissingReturn() (gas: 32065)
SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 276, μ: 32212, ~: 32285)
SafeTransferLibTest:testApproveWithNonContract() (gas: 3012)
Expand Down Expand Up @@ -1110,7 +1110,7 @@ SafeTransferLibTest:testTransferAllFromWithStandardERC20(address,address,uint256
SafeTransferLibTest:testTransferAllWithStandardERC20() (gas: 30832)
SafeTransferLibTest:testTransferAllWithStandardERC20(address,uint256) (runs: 276, μ: 42538, ~: 42538)
SafeTransferLibTest:testTransferETH() (gas: 34622)
SafeTransferLibTest:testTransferETH(address,uint256) (runs: 276, μ: 34738, ~: 35266)
SafeTransferLibTest:testTransferETH(address,uint256) (runs: 276, μ: 34855, ~: 35266)
SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts() (gas: 10851)
SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 276, μ: 10822, ~: 10888)
SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 276, μ: 790953, ~: 702964)
Expand All @@ -1130,19 +1130,19 @@ SafeTransferLibTest:testTransferFromWithRevertingReverts() (gas: 527143)
SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 276, μ: 652860, ~: 527301)
SafeTransferLibTest:testTransferFromWithStandardERC20() (gas: 566534)
SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 276, μ: 688343, ~: 566572)
SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 276, μ: 746682, ~: 648368)
SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 276, μ: 746864, ~: 648388)
SafeTransferLibTest:testTransferWithMissingReturn() (gas: 554420)
SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 276, μ: 673152, ~: 554767)
SafeTransferLibTest:testTransferWithNonContract() (gas: 3010)
SafeTransferLibTest:testTransferWithNonContract(address,address,uint256) (runs: 276, μ: 3623, ~: 3634)
SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 276, μ: 736975, ~: 624046)
SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 276, μ: 736976, ~: 624046)
SafeTransferLibTest:testTransferWithReturnsFalseReverts() (gas: 530949)
SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 276, μ: 685549, ~: 531206)
SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 276, μ: 685548, ~: 531206)
SafeTransferLibTest:testTransferWithReturnsTooLittleReverts() (gas: 531136)
SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 276, μ: 682990, ~: 531152)
SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 276, μ: 680577, ~: 531152)
SafeTransferLibTest:testTransferWithReturnsTooMuch() (gas: 554821)
SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 276, μ: 631020, ~: 555224)
SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 276, μ: 673918, ~: 531163)
SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 276, μ: 631021, ~: 555224)
SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 276, μ: 673917, ~: 531163)
SafeTransferLibTest:testTransferWithRevertingReverts() (gas: 530843)
SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 276, μ: 738591, ~: 531131)
SafeTransferLibTest:testTransferWithStandardERC20() (gas: 555088)
Expand Down
14 changes: 8 additions & 6 deletions src/utils/FixedPointMathLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -517,12 +517,13 @@ library FixedPointMathLib {
function mulDiv(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
/// @solidity memory-safe-assembly
assembly {
// Equivalent to require(d != 0 && (y == 0 || x <= type(uint256).max / y))
if iszero(mul(d, iszero(mul(y, gt(x, div(not(0), y)))))) {
z := mul(x, y)
// Equivalent to `require(d != 0 && (y == 0 || x <= type(uint256).max / y))`.
if iszero(mul(or(iszero(x), eq(div(z, x), y)), d)) {
mstore(0x00, 0xad251c27) // `MulDivFailed()`.
revert(0x1c, 0x04)
}
z := div(mul(x, y), d)
z := div(z, d)
}
}

Expand All @@ -531,12 +532,13 @@ library FixedPointMathLib {
function mulDivUp(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
/// @solidity memory-safe-assembly
assembly {
// Equivalent to require(d != 0 && (y == 0 || x <= type(uint256).max / y))
if iszero(mul(d, iszero(mul(y, gt(x, div(not(0), y)))))) {
z := mul(x, y)
// Equivalent to `require(d != 0 && (y == 0 || x <= type(uint256).max / y))`.
if iszero(mul(or(iszero(x), eq(div(z, x), y)), d)) {
mstore(0x00, 0xad251c27) // `MulDivFailed()`.
revert(0x1c, 0x04)
}
z := add(iszero(iszero(mod(mul(x, y), d))), div(mul(x, y), d))
z := add(iszero(iszero(mod(z, d))), div(z, d))
}
}

Expand Down

0 comments on commit 57a8c94

Please sign in to comment.