Skip to content

Commit

Permalink
Refactor and optimize toUint256
Browse files Browse the repository at this point in the history
  • Loading branch information
shuhuiluo committed May 11, 2024
1 parent b8ea054 commit 1282b90
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 27 deletions.
42 changes: 21 additions & 21 deletions .gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,10 @@ ERC1271Test:test__codesize() (gas: 30379)
ERC1967FactoryTest:testChangeAdmin() (gas: 266356)
ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257316)
ERC1967FactoryTest:testDeploy() (gas: 257375)
ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 256, μ: 339239, ~: 340929)
ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 256, μ: 339240, ~: 340930)
ERC1967FactoryTest:testDeployAndCallWithRevert() (gas: 211881)
ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 256, μ: 95011, ~: 44126)
ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 256, μ: 316607, ~: 350141)
ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 256, μ: 95010, ~: 44126)
ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 256, μ: 316605, ~: 350140)
ERC1967FactoryTest:testFactoryDeployment() (gas: 494435)
ERC1967FactoryTest:testProxyFails() (gas: 259019)
ERC1967FactoryTest:testProxySucceeds() (gas: 255707)
Expand Down Expand Up @@ -241,7 +241,7 @@ ERC4337Test:testDisableInitializerForImplementation() (gas: 1320597)
ERC4337Test:testETHReceived() (gas: 16584)
ERC4337Test:testExecute() (gas: 382808)
ERC4337Test:testExecuteBatch() (gas: 692731)
ERC4337Test:testExecuteBatch(uint256) (runs: 256, μ: 539057, ~: 668971)
ERC4337Test:testExecuteBatch(uint256) (runs: 256, μ: 541463, ~: 669054)
ERC4337Test:testInitializer() (gas: 285472)
ERC4337Test:testIsValidSignature() (gas: 119651)
ERC4337Test:testIsValidSignaturePersonalSign() (gas: 102966)
Expand Down Expand Up @@ -1053,22 +1053,22 @@ SSTORE2Test:testWriteReadOutOfBoundsReverts() (gas: 36485)
SSTORE2Test:testWriteReadOutOfStartBoundReverts() (gas: 36489)
SSTORE2Test:testWriteWithTooBigDataReverts() (gas: 97302815)
SSTORE2Test:test__codesize() (gas: 8484)
SafeCastLibTest:testSafeCastInt256ToInt(int256,uint256) (runs: 256, μ: 20317, ~: 24987)
SafeCastLibTest:testSafeCastInt256ToInt(int256,uint256) (runs: 256, μ: 20268, ~: 24976)
SafeCastLibTest:testSafeCastInt256ToIntBench() (gas: 341694)
SafeCastLibTest:testSafeCastToInt256(uint256) (runs: 256, μ: 427, ~: 383)
SafeCastLibTest:testSafeCastToInt256(uint256) (runs: 256, μ: 438, ~: 383)
SafeCastLibTest:testSafeCastToInt256Bench() (gas: 29380)
SafeCastLibTest:testSafeCastToUint256(int256) (runs: 256, μ: 1246, ~: 439)
SafeCastLibTest:testSafeCastToUint256(int256) (runs: 256, μ: 1249, ~: 428)
SafeCastLibTest:testSafeCastToUintBench() (gas: 326261)
SafeCastLibTest:testSafeCastUint256ToInt(uint256,uint256) (runs: 256, μ: 26950, ~: 26128)
SafeCastLibTest:testSafeCastUint256ToInt(uint256,uint256) (runs: 256, μ: 26896, ~: 26124)
SafeCastLibTest:testSafeCastUint256ToIntBench() (gas: 330222)
SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 256, μ: 19222, ~: 24881)
SafeCastLibTest:test__codesize() (gas: 23250)
SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 256, μ: 109688, ~: 123604)
SafeCastLibTest:testSafeCastUintToUint(uint256,uint256) (runs: 256, μ: 18844, ~: 24883)
SafeCastLibTest:test__codesize() (gas: 23166)
SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 256, μ: 109893, ~: 123668)
SafeTransferLibTest:testApproveWithMissingReturn() (gas: 32065)
SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 256, μ: 32207, ~: 32285)
SafeTransferLibTest:testApproveWithNonContract() (gas: 3012)
SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 256, μ: 3601, ~: 3613)
SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 256, μ: 80283, ~: 59368)
SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 256, μ: 79951, ~: 59368)
SafeTransferLibTest:testApproveWithRetry() (gas: 839904)
SafeTransferLibTest:testApproveWithRetry(address,uint256,uint256) (runs: 256, μ: 839660, ~: 840020)
SafeTransferLibTest:testApproveWithRetryWithNonContract() (gas: 2990)
Expand All @@ -1087,15 +1087,15 @@ SafeTransferLibTest:testApproveWithStandardERC20(address,uint256) (runs: 256, μ
SafeTransferLibTest:testBalanceOfStandardERC20() (gas: 7852)
SafeTransferLibTest:testBalanceOfStandardERC20(address,uint256) (runs: 256, μ: 40434, ~: 40719)
SafeTransferLibTest:testForceTransferETHToGriever() (gas: 1511565)
SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 256, μ: 537230, ~: 570885)
SafeTransferLibTest:testForceTransferETHToGriever(uint256,uint256) (runs: 256, μ: 537611, ~: 570885)
SafeTransferLibTest:testPermit2() (gas: 89497)
SafeTransferLibTest:testPermit2InvalidAmount(uint256) (runs: 256, μ: 102475, ~: 102494)
SafeTransferLibTest:testPermit2OnDAI() (gas: 89519)
SafeTransferLibTest:testPermit2TransferFromInvalidAmount(uint256) (runs: 256, μ: 133575, ~: 133954)
SafeTransferLibTest:testSimplePermit2AndPermit2TransferFrom() (gas: 1102105)
SafeTransferLibTest:testSimplePermit2AndPermit2TransferFromGas() (gas: 137347)
SafeTransferLibTest:testTransferAllETH() (gas: 34621)
SafeTransferLibTest:testTransferAllETH(address) (runs: 256, μ: 34774, ~: 35034)
SafeTransferLibTest:testTransferAllETH(address) (runs: 256, μ: 34650, ~: 35034)
SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts() (gas: 10846)
SafeTransferLibTest:testTransferAllETHToContractWithoutFallbackReverts(uint256) (runs: 256, μ: 10869, ~: 10869)
SafeTransferLibTest:testTransferAllFromWithStandardERC20() (gas: 33319)
Expand Down Expand Up @@ -1123,19 +1123,19 @@ SafeTransferLibTest:testTransferFromWithRevertingReverts() (gas: 527143)
SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 256, μ: 650408, ~: 527301)
SafeTransferLibTest:testTransferFromWithStandardERC20() (gas: 566534)
SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 686462, ~: 566511)
SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 256, μ: 755553, ~: 648409)
SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 256, μ: 755360, ~: 648398)
SafeTransferLibTest:testTransferWithMissingReturn() (gas: 554420)
SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 256, μ: 682403, ~: 554767)
SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 256, μ: 682404, ~: 554767)
SafeTransferLibTest:testTransferWithNonContract() (gas: 3010)
SafeTransferLibTest:testTransferWithNonContract(address,address,uint256) (runs: 256, μ: 3622, ~: 3634)
SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 256, μ: 746946, ~: 624041)
SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 256, μ: 746945, ~: 624041)
SafeTransferLibTest:testTransferWithReturnsFalseReverts() (gas: 530949)
SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 256, μ: 687048, ~: 531206)
SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 256, μ: 687049, ~: 531206)
SafeTransferLibTest:testTransferWithReturnsTooLittleReverts() (gas: 531136)
SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 256, μ: 686024, ~: 531152)
SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 256, μ: 686023, ~: 531152)
SafeTransferLibTest:testTransferWithReturnsTooMuch() (gas: 554821)
SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 256, μ: 630372, ~: 555224)
SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 256, μ: 685069, ~: 531143)
SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 256, μ: 630373, ~: 555224)
SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 256, μ: 695468, ~: 531123)
SafeTransferLibTest:testTransferWithRevertingReverts() (gas: 530843)
SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 256, μ: 737736, ~: 531142)
SafeTransferLibTest:testTransferWithStandardERC20() (gas: 555088)
Expand Down
7 changes: 1 addition & 6 deletions src/utils/SafeCastLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -556,12 +556,7 @@ library SafeCastLib {
}

function toUint256(int256 x) internal pure returns (uint256) {
bool overflows;
/// @solidity memory-safe-assembly
assembly {
overflows := slt(x, 0)
}
if (!overflows) return uint256(x);
if (x >= 0) return uint256(x);
_revertOverflow();
}

Expand Down

0 comments on commit 1282b90

Please sign in to comment.