From a23fa2b33bc2160def27c1b64d5bc7f30bbfe87a Mon Sep 17 00:00:00 2001 From: Shuhui Luo <107524008+shuhuiluo@users.noreply.github.com> Date: Sun, 14 Apr 2024 21:51:17 -0400 Subject: [PATCH] fix: Replace `shr` with `sar` for integer types This commit replaces `shr` with `sar` in the assembly code of `TickMath.sol`, specifically in commands dealing with integer types. Additionally, it includes an update to the interaction with the variable `tick256` - dropping the `signextend` function and just referencing `tick`. The changes also affect gas snapshots, though it is not the primary purpose of these modifications. --- .gas-snapshot | 266 ++++++++++++++++++++++---------------------- package.json | 2 +- src/TickMath.sol | 9 +- test/TickMath.t.sol | 7 +- 4 files changed, 144 insertions(+), 140 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index bd41a05..6cd4468 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,141 +1,141 @@ -BitMathTest:testFuzz_LSB(uint256) (runs: 65540, μ: 17693, ~: 17691) -BitMathTest:testFuzz_MSB(uint256) (runs: 65540, μ: 17526, ~: 17506) +BitMathTest:testFuzz_LSB(uint256) (runs: 65544, μ: 17590, ~: 17588) +BitMathTest:testFuzz_MSB(uint256) (runs: 65544, μ: 17423, ~: 17403) BitMathTest:testGas_LSB() (gas: 195427) BitMathTest:testGas_LSB_Og() (gas: 291094) BitMathTest:testGas_MSB() (gas: 210406) BitMathTest:testGas_MSB_Og() (gas: 274443) -FullMathTest:testFuzz_MulDiv96(uint256,uint256) (runs: 65539, μ: 3951, ~: 3936) -FullMathTest:testFuzz_MulDivUp_OZ(uint256,uint256,uint256) (runs: 65539, μ: 4736, ~: 4588) -FullMathTest:testFuzz_MulDivUp_Og(uint256,uint256,uint256) (runs: 65539, μ: 9926, ~: 9770) -FullMathTest:testFuzz_MulDiv_OZ(uint256,uint256,uint256) (runs: 65539, μ: 4378, ~: 4265) -FullMathTest:testFuzz_MulDiv_Og(uint256,uint256,uint256) (runs: 65539, μ: 9813, ~: 9680) -FullMathTest:testFuzz_Sqrt(uint256) (runs: 65540, μ: 4510, ~: 4517) -LiquidityAmountsTest:testFuzz_GetAmount0ForLiquidity(uint160,uint160,uint128) (runs: 65540, μ: 19847, ~: 19816) -LiquidityAmountsTest:testFuzz_GetAmount1ForLiquidity(uint160,uint160,uint128) (runs: 65540, μ: 19341, ~: 19468) -LiquidityAmountsTest:testFuzz_GetAmountsForLiquidity(uint160,uint160,uint160,uint128) (runs: 65540, μ: 21823, ~: 21768) -LiquidityAmountsTest:testFuzz_GetLiquidityForAmount0(uint160,uint160,uint256) (runs: 65540, μ: 19739, ~: 19818) -LiquidityAmountsTest:testFuzz_GetLiquidityForAmount1(uint160,uint160,uint256) (runs: 65540, μ: 19442, ~: 19461) -LiquidityAmountsTest:testFuzz_GetLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256) (runs: 65540, μ: 21088, ~: 21112) +FullMathTest:testFuzz_MulDiv96(uint256,uint256) (runs: 65541, μ: 3951, ~: 3936) +FullMathTest:testFuzz_MulDivUp_OZ(uint256,uint256,uint256) (runs: 65541, μ: 4736, ~: 4588) +FullMathTest:testFuzz_MulDivUp_Og(uint256,uint256,uint256) (runs: 65541, μ: 9926, ~: 9770) +FullMathTest:testFuzz_MulDiv_OZ(uint256,uint256,uint256) (runs: 65541, μ: 4379, ~: 4265) +FullMathTest:testFuzz_MulDiv_Og(uint256,uint256,uint256) (runs: 65541, μ: 9814, ~: 9680) +FullMathTest:testFuzz_Sqrt(uint256) (runs: 65544, μ: 4510, ~: 4517) +LiquidityAmountsTest:testFuzz_GetAmount0ForLiquidity(uint160,uint160,uint128) (runs: 65544, μ: 19641, ~: 19610) +LiquidityAmountsTest:testFuzz_GetAmount1ForLiquidity(uint160,uint160,uint128) (runs: 65544, μ: 19135, ~: 19262) +LiquidityAmountsTest:testFuzz_GetAmountsForLiquidity(uint160,uint160,uint160,uint128) (runs: 65544, μ: 21513, ~: 21459) +LiquidityAmountsTest:testFuzz_GetLiquidityForAmount0(uint160,uint160,uint256) (runs: 65544, μ: 19533, ~: 19612) +LiquidityAmountsTest:testFuzz_GetLiquidityForAmount1(uint160,uint160,uint256) (runs: 65544, μ: 19236, ~: 19255) +LiquidityAmountsTest:testFuzz_GetLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256) (runs: 65544, μ: 20778, ~: 20803) LiquidityAmountsTest:testGas_GetAmountsForLiquidity() (gas: 216208) LiquidityAmountsTest:testGas_GetAmountsForLiquidity_Og() (gas: 231471) LiquidityAmountsTest:testGas_GetLiquidityForAmounts() (gas: 223227) LiquidityAmountsTest:testGas_GetLiquidityForAmounts_Og() (gas: 258436) -LiquidityMathTest:testFuzz_AddDelta(uint128,int128) (runs: 65540, μ: 12250, ~: 14873) +LiquidityMathTest:testFuzz_AddDelta(uint128,int128) (runs: 65544, μ: 12188, ~: 14770) LiquidityMathTest:testGas_AddDelta() (gas: 113922) LiquidityMathTest:testGas_AddDelta_Og() (gas: 127984) -LiquidityMathTest:testRevert_LA() (gas: 9010) -LiquidityMathTest:testRevert_LS() (gas: 8839) -NPMCallerPCSTest:testFuzz_BalanceOf(address) (runs: 20, μ: 17583, ~: 17583) -NPMCallerPCSTest:testFuzz_GetApproved(uint256) (runs: 20, μ: 22879, ~: 22818) -NPMCallerPCSTest:testFuzz_IsApprovedForAll(uint256) (runs: 20, μ: 27733, ~: 18852) -NPMCallerPCSTest:testFuzz_OwnerOf(uint256) (runs: 20, μ: 23977, ~: 23664) -NPMCallerPCSTest:testFuzz_Positions(uint256) (runs: 20, μ: 29913, ~: 27550) -NPMCallerPCSTest:testFuzz_PositionsFull(uint256) (runs: 20, μ: 30203, ~: 27885) -NPMCallerPCSTest:testFuzz_TokenOfOwnerByIndex(uint256) (runs: 20, μ: 20339, ~: 16408) +LiquidityMathTest:testRevert_LA() (gas: 8907) +LiquidityMathTest:testRevert_LS() (gas: 8736) +NPMCallerPCSTest:testFuzz_BalanceOf(address) (runs: 24, μ: 17583, ~: 17583) +NPMCallerPCSTest:testFuzz_GetApproved(uint256) (runs: 24, μ: 22773, ~: 22759) +NPMCallerPCSTest:testFuzz_IsApprovedForAll(uint256) (runs: 24, μ: 25855, ~: 18463) +NPMCallerPCSTest:testFuzz_OwnerOf(uint256) (runs: 24, μ: 23829, ~: 23605) +NPMCallerPCSTest:testFuzz_Positions(uint256) (runs: 24, μ: 29179, ~: 27285) +NPMCallerPCSTest:testFuzz_PositionsFull(uint256) (runs: 24, μ: 29489, ~: 27620) +NPMCallerPCSTest:testFuzz_TokenOfOwnerByIndex(uint256) (runs: 24, μ: 19312, ~: 16019) NPMCallerPCSTest:testRevert_GetApproved() (gas: 14243) NPMCallerPCSTest:testRevert_OwnerOf() (gas: 14457) NPMCallerPCSTest:testRevert_Positions() (gas: 24241) -NPMCallerPCSTest:test_Approve() (gas: 129635) -NPMCallerPCSTest:test_Burn() (gas: 1052861) -NPMCallerPCSTest:test_Collect() (gas: 996182) -NPMCallerPCSTest:test_DecreaseLiquidity() (gas: 915907) -NPMCallerPCSTest:test_Factory() (gas: 15434) -NPMCallerPCSTest:test_IncreaseLiquidity() (gas: 1226296) -NPMCallerPCSTest:test_IsApprovedForAll() (gas: 26527) -NPMCallerPCSTest:test_Mint() (gas: 725430) -NPMCallerPCSTest:test_Permit() (gas: 813515) -NPMCallerPCSTest:test_SetApprovalForAll() (gas: 61573) +NPMCallerPCSTest:test_Approve() (gas: 129532) +NPMCallerPCSTest:test_Burn() (gas: 1051456) +NPMCallerPCSTest:test_Collect() (gas: 994777) +NPMCallerPCSTest:test_DecreaseLiquidity() (gas: 914605) +NPMCallerPCSTest:test_Factory() (gas: 15331) +NPMCallerPCSTest:test_IncreaseLiquidity() (gas: 1222897) +NPMCallerPCSTest:test_IsApprovedForAll() (gas: 26424) +NPMCallerPCSTest:test_Mint() (gas: 724128) +NPMCallerPCSTest:test_Permit() (gas: 812007) +NPMCallerPCSTest:test_SetApprovalForAll() (gas: 61470) NPMCallerPCSTest:test_TotalSupply() (gas: 16943) -NPMCallerTest:testFuzz_BalanceOf(address) (runs: 20, μ: 17627, ~: 17627) -NPMCallerTest:testFuzz_GetApproved(uint256) (runs: 20, μ: 23656, ~: 23675) -NPMCallerTest:testFuzz_IsApprovedForAll(uint256) (runs: 20, μ: 78469, ~: 78488) -NPMCallerTest:testFuzz_OwnerOf(uint256) (runs: 20, μ: 26136, ~: 26155) -NPMCallerTest:testFuzz_Positions(uint256) (runs: 20, μ: 43740, ~: 43759) -NPMCallerTest:testFuzz_PositionsFull(uint256) (runs: 20, μ: 43772, ~: 43791) -NPMCallerTest:testFuzz_TokenOfOwnerByIndex(uint256) (runs: 20, μ: 60206, ~: 45017) +NPMCallerTest:testFuzz_BalanceOf(address) (runs: 24, μ: 17627, ~: 17627) +NPMCallerTest:testFuzz_GetApproved(uint256) (runs: 24, μ: 23470, ~: 23469) +NPMCallerTest:testFuzz_IsApprovedForAll(uint256) (runs: 24, μ: 78180, ~: 78179) +NPMCallerTest:testFuzz_OwnerOf(uint256) (runs: 24, μ: 25950, ~: 25949) +NPMCallerTest:testFuzz_Positions(uint256) (runs: 24, μ: 43039, ~: 43038) +NPMCallerTest:testFuzz_PositionsFull(uint256) (runs: 24, μ: 43174, ~: 43173) +NPMCallerTest:testFuzz_TokenOfOwnerByIndex(uint256) (runs: 24, μ: 55610, ~: 44794) NPMCallerTest:testRevert_GetApproved() (gas: 14243) NPMCallerTest:testRevert_OwnerOf() (gas: 14434) NPMCallerTest:testRevert_Positions() (gas: 24241) -NPMCallerTest:test_Approve() (gas: 129624) -NPMCallerTest:test_Burn() (gas: 949077) -NPMCallerTest:test_Collect() (gas: 892392) -NPMCallerTest:test_DecreaseLiquidity() (gas: 812089) -NPMCallerTest:test_Factory() (gas: 15434) -NPMCallerTest:test_IncreaseLiquidity() (gas: 1100278) -NPMCallerTest:test_IsApprovedForAll() (gas: 26504) -NPMCallerTest:test_Mint() (gas: 601612) -NPMCallerTest:test_Permit() (gas: 689760) -NPMCallerTest:test_SetApprovalForAll() (gas: 61573) +NPMCallerTest:test_Approve() (gas: 129521) +NPMCallerTest:test_Burn() (gas: 947697) +NPMCallerTest:test_Collect() (gas: 891012) +NPMCallerTest:test_DecreaseLiquidity() (gas: 810812) +NPMCallerTest:test_Factory() (gas: 15331) +NPMCallerTest:test_IncreaseLiquidity() (gas: 1096954) +NPMCallerTest:test_IsApprovedForAll() (gas: 26401) +NPMCallerTest:test_Mint() (gas: 600335) +NPMCallerTest:test_Permit() (gas: 688277) +NPMCallerTest:test_SetApprovalForAll() (gas: 61470) NPMCallerTest:test_TotalSupply() (gas: 16943) -PoolAddressPCSTest:testFuzz_ComputeAddress(address,address,uint24) (runs: 65540, μ: 20293, ~: 20279) -PoolAddressPCSTest:testFuzz_ComputeAddressCalldata(address,address,uint24) (runs: 65540, μ: 14960, ~: 14946) -PoolAddressPCSTest:testFuzz_ComputeAddressFromKey(address,address,uint24) (runs: 65540, μ: 22090, ~: 22077) -PoolAddressPCSTest:testFuzz_VerifyCallback(address,address,uint24) (runs: 65540, μ: 16366, ~: 16353) -PoolAddressPCSTest:testFuzz_VerifyCallbackCalldata(address,address,uint24) (runs: 65540, μ: 15513, ~: 15499) +PoolAddressPCSTest:testFuzz_ComputeAddress(address,address,uint24) (runs: 65544, μ: 20293, ~: 20279) +PoolAddressPCSTest:testFuzz_ComputeAddressCalldata(address,address,uint24) (runs: 65544, μ: 14733, ~: 14719) +PoolAddressPCSTest:testFuzz_ComputeAddressFromKey(address,address,uint24) (runs: 65544, μ: 22090, ~: 22077) +PoolAddressPCSTest:testFuzz_VerifyCallback(address,address,uint24) (runs: 65544, μ: 16366, ~: 16353) +PoolAddressPCSTest:testFuzz_VerifyCallbackCalldata(address,address,uint24) (runs: 65544, μ: 15286, ~: 15272) PoolAddressPCSTest:testGas_ComputeAddress() (gas: 11823) PoolAddressPCSTest:testGas_ComputeAddress_Og() (gas: 12742) -PoolAddressTest:testFuzz_ComputeAddress(address,address,uint24) (runs: 65540, μ: 20293, ~: 20279) -PoolAddressTest:testFuzz_ComputeAddressCalldata(address,address,uint24) (runs: 65540, μ: 14960, ~: 14946) -PoolAddressTest:testFuzz_ComputeAddressFromKey(address,address,uint24) (runs: 65540, μ: 22090, ~: 22077) -PoolAddressTest:testFuzz_VerifyCallback(address,address,uint24) (runs: 65540, μ: 16366, ~: 16353) -PoolAddressTest:testFuzz_VerifyCallbackCalldata(address,address,uint24) (runs: 65540, μ: 15513, ~: 15499) +PoolAddressTest:testFuzz_ComputeAddress(address,address,uint24) (runs: 65544, μ: 20293, ~: 20279) +PoolAddressTest:testFuzz_ComputeAddressCalldata(address,address,uint24) (runs: 65544, μ: 14733, ~: 14719) +PoolAddressTest:testFuzz_ComputeAddressFromKey(address,address,uint24) (runs: 65544, μ: 22090, ~: 22077) +PoolAddressTest:testFuzz_VerifyCallback(address,address,uint24) (runs: 65544, μ: 16366, ~: 16353) +PoolAddressTest:testFuzz_VerifyCallbackCalldata(address,address,uint24) (runs: 65544, μ: 15286, ~: 15272) PoolAddressTest:testGas_ComputeAddress() (gas: 11823) PoolAddressTest:testGas_ComputeAddress_Og() (gas: 12742) -PoolCallerPCSTest:testFuzz_LiquidityNet(int24) (runs: 20, μ: 21859, ~: 21859) -PoolCallerPCSTest:testFuzz_Observations(uint256) (runs: 5, μ: 677, ~: 677) -PoolCallerPCSTest:testFuzz_Positions(bytes32) (runs: 20, μ: 24807, ~: 24807) -PoolCallerPCSTest:testFuzz_Swap(bool,uint256,bytes) (runs: 20, μ: 382622, ~: 343882) -PoolCallerPCSTest:testFuzz_TickBitmap(int16) (runs: 20, μ: 14069, ~: 14069) -PoolCallerPCSTest:testFuzz_Ticks(int24) (runs: 20, μ: 28065, ~: 28065) -PoolCallerPCSTest:testRevert_AS_Swap() (gas: 35348) -PoolCallerPCSTest:testRevert_SPL_Swap() (gas: 40071) -PoolCallerPCSTest:test_Fee() (gas: 11830) -PoolCallerPCSTest:test_FeeGrowthGlobal0X128() (gas: 13442) -PoolCallerPCSTest:test_FeeGrowthGlobal1X128() (gas: 14003) -PoolCallerPCSTest:test_Liquidity() (gas: 13725) -PoolCallerPCSTest:test_LiquidityNet() (gas: 27788) -PoolCallerPCSTest:test_ProtocolFees() (gas: 14769) -PoolCallerPCSTest:test_Slot0() (gas: 20740) -PoolCallerPCSTest:test_SqrtPriceX96AndTick() (gas: 15806) -PoolCallerPCSTest:test_Swap() (gas: 468560) -PoolCallerPCSTest:test_TickSpacing() (gas: 11349) -PoolCallerTest:testFuzz_LiquidityNet(int24) (runs: 20, μ: 21887, ~: 21887) -PoolCallerTest:testFuzz_Observations(uint256) (runs: 20, μ: 23911, ~: 23974) -PoolCallerTest:testFuzz_Positions(bytes32) (runs: 20, μ: 24852, ~: 24852) -PoolCallerTest:testFuzz_Swap(bool,uint256,bytes) (runs: 20, μ: 318988, ~: 295185) -PoolCallerTest:testFuzz_TickBitmap(int16) (runs: 20, μ: 14133, ~: 14133) -PoolCallerTest:testFuzz_Ticks(int24) (runs: 20, μ: 28117, ~: 28117) -PoolCallerTest:testRevert_AS_Swap() (gas: 35407) -PoolCallerTest:testRevert_SPL_Swap() (gas: 38034) -PoolCallerTest:test_Fee() (gas: 11824) -PoolCallerTest:test_FeeGrowthGlobal0X128() (gas: 13487) -PoolCallerTest:test_FeeGrowthGlobal1X128() (gas: 14041) -PoolCallerTest:test_Liquidity() (gas: 13743) -PoolCallerTest:test_LiquidityNet() (gas: 25720) -PoolCallerTest:test_ProtocolFees() (gas: 14778) -PoolCallerTest:test_Slot0() (gas: 20131) -PoolCallerTest:test_SqrtPriceX96AndTick() (gas: 13480) -PoolCallerTest:test_Swap() (gas: 417727) -PoolCallerTest:test_TickSpacing() (gas: 11367) -SafeCastTest:testRevert_ToInt128() (gas: 3406) -SafeCastTest:testRevert_ToInt256() (gas: 3044) -SafeCastTest:testRevert_ToUint128() (gas: 3428) -SafeCastTest:testRevert_ToUint160() (gas: 3203) -SafeCastTest:testToInt128() (gas: 3471) -SafeCastTest:testToInt128(int256) (runs: 65540, μ: 3378, ~: 3380) -SafeCastTest:testToInt128(uint256) (runs: 65540, μ: 3108, ~: 3129) -SafeCastTest:testToInt256() (gas: 3087) -SafeCastTest:testToInt256(uint256) (runs: 65540, μ: 3577, ~: 3583) -SafeCastTest:testToUint128(uint256) (runs: 65540, μ: 3425, ~: 3433) -SafeCastTest:testToUint160(uint256) (runs: 65540, μ: 3201, ~: 3208) -SqrtPriceMathTest:testFuzz_GetAmount0Delta(uint160,uint160,int128) (runs: 65540, μ: 15481, ~: 15330) -SqrtPriceMathTest:testFuzz_GetAmount0Delta(uint160,uint160,uint128,bool) (runs: 65540, μ: 15141, ~: 15112) -SqrtPriceMathTest:testFuzz_GetAmount1Delta(uint160,uint160,int128) (runs: 65540, μ: 15384, ~: 15304) -SqrtPriceMathTest:testFuzz_GetAmount1Delta(uint160,uint160,uint128,bool) (runs: 65540, μ: 15398, ~: 15426) -SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromAmount0RoundingUp(uint160,uint128,uint256,bool) (runs: 65540, μ: 18330, ~: 18148) -SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromAmount1RoundingDown(uint160,uint128,uint256,bool) (runs: 65540, μ: 20437, ~: 20422) -SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromInput(uint160,uint128,uint256,bool) (runs: 65540, μ: 15286, ~: 15233) -SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromOutput(uint160,uint128,uint256,bool) (runs: 65540, μ: 15126, ~: 14848) +PoolCallerPCSTest:testFuzz_LiquidityNet(int24) (runs: 24, μ: 21756, ~: 21756) +PoolCallerPCSTest:testFuzz_Observations(uint256) (runs: 9, μ: 677, ~: 677) +PoolCallerPCSTest:testFuzz_Positions(bytes32) (runs: 24, μ: 24292, ~: 24292) +PoolCallerPCSTest:testFuzz_Swap(bool,uint256,bytes) (runs: 24, μ: 398188, ~: 377511) +PoolCallerPCSTest:testFuzz_TickBitmap(int16) (runs: 24, μ: 13966, ~: 13966) +PoolCallerPCSTest:testFuzz_Ticks(int24) (runs: 24, μ: 27241, ~: 27241) +PoolCallerPCSTest:testRevert_AS_Swap() (gas: 35204) +PoolCallerPCSTest:testRevert_SPL_Swap() (gas: 39927) +PoolCallerPCSTest:test_Fee() (gas: 11727) +PoolCallerPCSTest:test_FeeGrowthGlobal0X128() (gas: 13339) +PoolCallerPCSTest:test_FeeGrowthGlobal1X128() (gas: 13900) +PoolCallerPCSTest:test_Liquidity() (gas: 13622) +PoolCallerPCSTest:test_LiquidityNet() (gas: 27685) +PoolCallerPCSTest:test_ProtocolFees() (gas: 14563) +PoolCallerPCSTest:test_Slot0() (gas: 20225) +PoolCallerPCSTest:test_SqrtPriceX96AndTick() (gas: 15600) +PoolCallerPCSTest:test_Swap() (gas: 466499) +PoolCallerPCSTest:test_TickSpacing() (gas: 11246) +PoolCallerTest:testFuzz_LiquidityNet(int24) (runs: 24, μ: 21784, ~: 21784) +PoolCallerTest:testFuzz_Observations(uint256) (runs: 24, μ: 23337, ~: 23397) +PoolCallerTest:testFuzz_Positions(bytes32) (runs: 24, μ: 24337, ~: 24337) +PoolCallerTest:testFuzz_Swap(bool,uint256,bytes) (runs: 24, μ: 335288, ~: 311237) +PoolCallerTest:testFuzz_TickBitmap(int16) (runs: 24, μ: 14030, ~: 14030) +PoolCallerTest:testFuzz_Ticks(int24) (runs: 24, μ: 27293, ~: 27293) +PoolCallerTest:testRevert_AS_Swap() (gas: 35263) +PoolCallerTest:testRevert_SPL_Swap() (gas: 37890) +PoolCallerTest:test_Fee() (gas: 11721) +PoolCallerTest:test_FeeGrowthGlobal0X128() (gas: 13384) +PoolCallerTest:test_FeeGrowthGlobal1X128() (gas: 13938) +PoolCallerTest:test_Liquidity() (gas: 13640) +PoolCallerTest:test_LiquidityNet() (gas: 25617) +PoolCallerTest:test_ProtocolFees() (gas: 14572) +PoolCallerTest:test_Slot0() (gas: 19410) +PoolCallerTest:test_SqrtPriceX96AndTick() (gas: 13274) +PoolCallerTest:test_Swap() (gas: 415707) +PoolCallerTest:test_TickSpacing() (gas: 11264) +SafeCastTest:testRevert_ToInt128() (gas: 3384) +SafeCastTest:testRevert_ToInt256() (gas: 3032) +SafeCastTest:testRevert_ToUint128() (gas: 3406) +SafeCastTest:testRevert_ToUint160() (gas: 3186) +SafeCastTest:testToInt128() (gas: 3444) +SafeCastTest:testToInt128(int256) (runs: 65544, μ: 3352, ~: 3356) +SafeCastTest:testToInt128(uint256) (runs: 65544, μ: 3098, ~: 3118) +SafeCastTest:testToInt256() (gas: 3070) +SafeCastTest:testToInt256(uint256) (runs: 65544, μ: 3541, ~: 3546) +SafeCastTest:testToUint128(uint256) (runs: 65544, μ: 3389, ~: 3398) +SafeCastTest:testToUint160(uint256) (runs: 65544, μ: 3170, ~: 3178) +SqrtPriceMathTest:testFuzz_GetAmount0Delta(uint160,uint160,int128) (runs: 65544, μ: 15481, ~: 15330) +SqrtPriceMathTest:testFuzz_GetAmount0Delta(uint160,uint160,uint128,bool) (runs: 65544, μ: 15141, ~: 15112) +SqrtPriceMathTest:testFuzz_GetAmount1Delta(uint160,uint160,int128) (runs: 65544, μ: 15383, ~: 15304) +SqrtPriceMathTest:testFuzz_GetAmount1Delta(uint160,uint160,uint128,bool) (runs: 65544, μ: 15398, ~: 15426) +SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromAmount0RoundingUp(uint160,uint128,uint256,bool) (runs: 65544, μ: 18226, ~: 18045) +SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromAmount1RoundingDown(uint160,uint128,uint256,bool) (runs: 65544, μ: 20128, ~: 20113) +SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromInput(uint160,uint128,uint256,bool) (runs: 65544, μ: 15285, ~: 15233) +SqrtPriceMathTest:testFuzz_GetNextSqrtPriceFromOutput(uint160,uint128,uint256,bool) (runs: 65544, μ: 15127, ~: 14848) SqrtPriceMathTest:testGas_GetAmount0Delta() (gas: 261269) SqrtPriceMathTest:testGas_GetAmount0Delta_Og() (gas: 280254) SqrtPriceMathTest:testGas_GetAmount1Delta() (gas: 213909) @@ -144,40 +144,40 @@ SqrtPriceMathTest:testGas_GetNextSqrtPriceFromInput() (gas: 232112) SqrtPriceMathTest:testGas_GetNextSqrtPriceFromInput_Og() (gas: 243885) SqrtPriceMathTest:testGas_GetNextSqrtPriceFromOutput() (gas: 217203) SqrtPriceMathTest:testGas_GetNextSqrtPriceFromOutput_Og() (gas: 225117) -SwapMathTest:testFuzz_ComputeSwapStep(uint160,uint160,uint128,int256,uint24) (runs: 65540, μ: 25249, ~: 24973) -SwapMathTest:testFuzz_ComputeSwapStepExactIn(uint160,uint160,uint128,uint256,uint24) (runs: 65540, μ: 27502, ~: 27289) -SwapMathTest:testFuzz_ComputeSwapStepExactOut(uint160,uint160,uint128,uint256,uint24) (runs: 65540, μ: 26983, ~: 26690) +SwapMathTest:testFuzz_ComputeSwapStep(uint160,uint160,uint128,int256,uint24) (runs: 65544, μ: 24838, ~: 24580) +SwapMathTest:testFuzz_ComputeSwapStepExactIn(uint160,uint160,uint128,uint256,uint24) (runs: 65544, μ: 26678, ~: 26473) +SwapMathTest:testFuzz_ComputeSwapStepExactOut(uint160,uint160,uint128,uint256,uint24) (runs: 65544, μ: 26161, ~: 25866) SwapMathTest:testGas_ComputeSwapStep() (gas: 384720) SwapMathTest:testGas_ComputeSwapStepExactIn() (gas: 394759) SwapMathTest:testGas_ComputeSwapStepExactIn_Og() (gas: 515722) SwapMathTest:testGas_ComputeSwapStepExactOut() (gas: 370755) SwapMathTest:testGas_ComputeSwapStepExactOut_Og() (gas: 510266) SwapMathTest:testGas_ComputeSwapStep_Og() (gas: 526558) -TickBitmapPCSTest:testFuzz_Compress(int24,int24) (runs: 65540, μ: 8624, ~: 8658) -TickBitmapPCSTest:testFuzz_FlipTick(int24) (runs: 65540, μ: 111578, ~: 111849) -TickBitmapPCSTest:testFuzz_NextInitializedTickWithinOneWord(int24,uint8,bool) (runs: 65540, μ: 111540, ~: 111446) -TickBitmapPCSTest:testFuzz_Position(int24) (runs: 65540, μ: 3714, ~: 3714) +TickBitmapPCSTest:testFuzz_Compress(int24,int24) (runs: 65544, μ: 8312, ~: 8357) +TickBitmapPCSTest:testFuzz_FlipTick(int24) (runs: 65544, μ: 111577, ~: 111849) +TickBitmapPCSTest:testFuzz_NextInitializedTickWithinOneWord(int24,uint8,bool) (runs: 65544, μ: 111126, ~: 111031) +TickBitmapPCSTest:testFuzz_Position(int24) (runs: 65544, μ: 3714, ~: 3714) TickBitmapPCSTest:testGas_NextInitializedTickWithinOneWord() (gas: 12286448) TickBitmapPCSTest:testGas_NextInitializedTickWithinOneWord_Og() (gas: 12567608) TickBitmapPCSTest:test_NextInitializedTickWithinOneWord_GT() (gas: 105771) TickBitmapPCSTest:test_NextInitializedTickWithinOneWord_LTE() (gas: 105789) TickBitmapPCSTest:test_NextInitializedTick_GT() (gas: 114328) TickBitmapPCSTest:test_NextInitializedTick_LTE() (gas: 115996) -TickBitmapTest:testFuzz_Compress(int24,int24) (runs: 65540, μ: 8624, ~: 8669) -TickBitmapTest:testFuzz_FlipTick(int24) (runs: 65540, μ: 111578, ~: 111849) -TickBitmapTest:testFuzz_NextInitializedTickWithinOneWord(int24,uint8,bool) (runs: 65540, μ: 111541, ~: 111446) -TickBitmapTest:testFuzz_Position(int24) (runs: 65540, μ: 3714, ~: 3714) +TickBitmapTest:testFuzz_Compress(int24,int24) (runs: 65544, μ: 8312, ~: 8357) +TickBitmapTest:testFuzz_FlipTick(int24) (runs: 65544, μ: 111577, ~: 111849) +TickBitmapTest:testFuzz_NextInitializedTickWithinOneWord(int24,uint8,bool) (runs: 65544, μ: 111126, ~: 111031) +TickBitmapTest:testFuzz_Position(int24) (runs: 65544, μ: 3714, ~: 3714) TickBitmapTest:testGas_NextInitializedTickWithinOneWord() (gas: 12286448) TickBitmapTest:testGas_NextInitializedTickWithinOneWord_Og() (gas: 12567608) TickBitmapTest:test_NextInitializedTickWithinOneWord_GT() (gas: 230082) TickBitmapTest:test_NextInitializedTickWithinOneWord_LTE() (gas: 232560) TickBitmapTest:test_NextInitializedTick_GT() (gas: 373790) TickBitmapTest:test_NextInitializedTick_LTE() (gas: 420968) -TickMathTest:testFuzz_GetSqrtRatioAtTick(int24) (runs: 65540, μ: 17222, ~: 17433) -TickMathTest:testFuzz_GetTickAtSqrtRatio(uint160) (runs: 65540, μ: 16021, ~: 16211) -TickMathTest:testGas_GetSqrtRatioAtTick() (gas: 147574) +TickMathTest:testFuzz_GetSqrtRatioAtTick(int24) (runs: 65544, μ: 16894, ~: 17105) +TickMathTest:testFuzz_GetTickAtSqrtRatio(uint160) (runs: 65544, μ: 15903, ~: 16092) +TickMathTest:testGas_GetSqrtRatioAtTick() (gas: 146774) TickMathTest:testGas_GetSqrtRatioAtTick_Og() (gas: 168553) -TickMathTest:testGas_GetTickAtSqrtRatio() (gas: 252268) +TickMathTest:testGas_GetTickAtSqrtRatio() (gas: 251548) TickMathTest:testGas_GetTickAtSqrtRatio_Og() (gas: 307796) -TickMathTest:testRevert_GetSqrtRatioAtTick() (gas: 10445) -TickMathTest:testRevert_GetTickAtSqrtRatio() (gas: 10522) \ No newline at end of file +TickMathTest:testRevert_GetSqrtRatioAtTick() (gas: 10223) +TickMathTest:testRevert_GetTickAtSqrtRatio() (gas: 10316) \ No newline at end of file diff --git a/package.json b/package.json index 8f74e84..f330cc1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@aperture_finance/uni-v3-lib", "description": "A suite of Solidity libraries that have been imported and rewritten from Uniswap's v3-core and v3-periphery", - "version": "2.0.2", + "version": "2.0.3", "author": "Aperture Finance", "homepage": "https://aperture.finance/", "license": "GPL-2.0-or-later", diff --git a/src/TickMath.sol b/src/TickMath.sol index d478adc..ae4e152 100644 --- a/src/TickMath.sol +++ b/src/TickMath.sol @@ -31,8 +31,7 @@ library TickMath { unchecked { int256 tick256; assembly { - // sign extend to make tick an int256 in twos complement - tick256 := signextend(2, tick) + tick256 := tick } uint256 absTick = TernaryLib.abs(tick256); /// @solidity memory-safe-assembly @@ -90,7 +89,7 @@ library TickMath { // if (tick > 0) ratio = type(uint256).max / ratio; assembly { - if sgt(tick256, 0) { + if sgt(tick, 0) { ratio := div(not(0), ratio) } } @@ -249,8 +248,8 @@ library TickMath { int24 tickHi; assembly { let log_sqrt10001 := mul(log_2X64, 255738958999603826347141) // 128.128 number - tickLow := shr(128, sub(log_sqrt10001, 3402992956809132418596140100660247210)) - tickHi := shr(128, add(log_sqrt10001, 291339464771989622907027621153398088495)) + tickLow := sar(128, sub(log_sqrt10001, 3402992956809132418596140100660247210)) + tickHi := sar(128, add(log_sqrt10001, 291339464771989622907027621153398088495)) } // Equivalent: tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; diff --git a/test/TickMath.t.sol b/test/TickMath.t.sol index 291730f..17e5320 100644 --- a/test/TickMath.t.sol +++ b/test/TickMath.t.sol @@ -84,6 +84,11 @@ contract TickMathTest is Test { /// @notice Test the equivalence of `getTickAtSqrtRatio` and the original library function testFuzz_GetTickAtSqrtRatio(uint160 sqrtPriceX96) public view { sqrtPriceX96 = uint160(bound(sqrtPriceX96, TickMath.MIN_SQRT_RATIO, TickMath.MAX_SQRT_RATIO - 1)); - assertEq(TickMath.getTickAtSqrtRatio(sqrtPriceX96), ogWrapper.getTickAtSqrtRatio(sqrtPriceX96)); + int24 tick = TickMath.getTickAtSqrtRatio(sqrtPriceX96); + int256 tick256; + assembly { + tick256 := tick + } + assertEq(tick256, ogWrapper.getTickAtSqrtRatio(sqrtPriceX96)); } }