Merge branch 'all-audit-fixes' into main

This commit is contained in:
Owen
2022-02-08 11:49:24 -08:00
3 changed files with 614 additions and 605 deletions
+480 -480
View File
@@ -1,480 +1,480 @@
test_getBuyInfoExample() (gas: 3969)
test_getBuyInfoWithoutFee(uint128,uint64,uint8) (runs: 256, μ: 1407, ~: 1265)
test_getSellInfoExample() (gas: 4002)
test_getSellInfoWithoutFee(uint128,uint128,uint8) (runs: 256, μ: 4368, ~: 4357)
test_getBuyInfoExample() (gas: 3343)
test_getBuyInfoWithoutFee(uint128,uint128,uint8) (runs: 256, μ: 4156, ~: 4158)
test_getSellInfoExample() (gas: 3333)
test_getSellInfoWithoutFee(uint128,uint128,uint8) (runs: 256, μ: 4526, ~: 4532)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 977526, ~: 1418547)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 951539, ~: 1409500)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 378618, ~: 447530)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 347184, ~: 430293)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 953951, ~: 1467623)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 909806, ~: 1419494)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 355042, ~: 496604)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 305450, ~: 440285)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 976876, ~: 1418090)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 963226, ~: 1429029)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 377576, ~: 447073)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 358871, ~: 449822)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 953302, ~: 1467166)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 921493, ~: 1439023)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 354000, ~: 496147)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 317137, ~: 459814)
testFail_callMint721() (gas: 5580)
testFail_changeAssetRecipientForTrade() (gas: 1680)
testFail_changeDeltaNotOwner() (gas: 4463)
testFail_changeFeeAboveMax() (gas: 1637)
testFail_changeFeeNotOwner() (gas: 4420)
testFail_changeSpotNotOwner() (gas: 4398)
testFail_reInitPool() (gas: 1818)
testFail_rescueTokensNotOwner() (gas: 5527)
testFail_tradePoolChangeAssetRecipient() (gas: 1657)
testFail_tradePoolChangeFeePastMax() (gas: 1659)
testFail_transferOwnership() (gas: 4459)
testFail_withdraw() (gas: 5646)
testGas_basicDeploy() (gas: 205625)
test_callMint721() (gas: 142896)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 7311)
test_modifyPairParams() (gas: 32033)
test_rescueTokens() (gas: 131534)
test_transferOwnership() (gas: 3307)
test_verifyPoolParams() (gas: 15401)
test_withdraw() (gas: 8264)
test_withdrawFees() (gas: 202371)
testFail_callMint721() (gas: 5577)
testFail_changeAssetRecipientForTrade() (gas: 1699)
testFail_changeDeltaNotOwner() (gas: 4479)
testFail_changeFeeAboveMax() (gas: 1634)
testFail_changeFeeNotOwner() (gas: 4436)
testFail_changeSpotNotOwner() (gas: 4414)
testFail_reInitPool() (gas: 1815)
testFail_rescueTokensNotOwner() (gas: 5543)
testFail_tradePoolChangeAssetRecipient() (gas: 1676)
testFail_tradePoolChangeFeePastMax() (gas: 1656)
testFail_transferOwnership() (gas: 4497)
testFail_withdraw() (gas: 4401)
testGas_basicDeploy() (gas: 161714)
test_callMint721() (gas: 142893)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 7308)
test_modifyPairParams() (gas: 32004)
test_rescueTokens() (gas: 131482)
test_transferOwnership() (gas: 3326)
test_verifyPoolParams() (gas: 14429)
test_withdraw() (gas: 9942)
test_withdrawFees() (gas: 192959)
testFail_callMint721() (gas: 5580)
testFail_changeAssetRecipientForTrade() (gas: 1680)
testFail_changeDeltaNotOwner() (gas: 4463)
testFail_changeFeeAboveMax() (gas: 1637)
testFail_changeFeeNotOwner() (gas: 4420)
testFail_changeSpotNotOwner() (gas: 4398)
testFail_reInitPool() (gas: 1818)
testFail_rescueTokensNotOwner() (gas: 5527)
testFail_tradePoolChangeAssetRecipient() (gas: 1657)
testFail_tradePoolChangeFeePastMax() (gas: 1659)
testFail_transferOwnership() (gas: 4459)
testFail_withdraw() (gas: 5646)
testGas_basicDeploy() (gas: 205518)
test_callMint721() (gas: 75470)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 4603)
test_modifyPairParams() (gas: 32033)
test_rescueTokens() (gas: 71097)
test_transferOwnership() (gas: 3307)
test_verifyPoolParams() (gas: 15357)
test_withdraw() (gas: 8264)
test_withdrawFees() (gas: 139341)
testFail_callMint721() (gas: 5577)
testFail_changeAssetRecipientForTrade() (gas: 1699)
testFail_changeDeltaNotOwner() (gas: 4479)
testFail_changeFeeAboveMax() (gas: 1634)
testFail_changeFeeNotOwner() (gas: 4436)
testFail_changeSpotNotOwner() (gas: 4414)
testFail_reInitPool() (gas: 1815)
testFail_rescueTokensNotOwner() (gas: 5543)
testFail_tradePoolChangeAssetRecipient() (gas: 1676)
testFail_tradePoolChangeFeePastMax() (gas: 1656)
testFail_transferOwnership() (gas: 4497)
testFail_withdraw() (gas: 4401)
testGas_basicDeploy() (gas: 161607)
test_callMint721() (gas: 75467)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 4600)
test_modifyPairParams() (gas: 32004)
test_rescueTokens() (gas: 71045)
test_transferOwnership() (gas: 3326)
test_verifyPoolParams() (gas: 14385)
test_withdraw() (gas: 9942)
test_withdrawFees() (gas: 129927)
testFail_callMint721() (gas: 5580)
testFail_changeAssetRecipientForTrade() (gas: 1680)
testFail_changeDeltaNotOwner() (gas: 4463)
testFail_changeFeeAboveMax() (gas: 1637)
testFail_changeFeeNotOwner() (gas: 4420)
testFail_changeSpotNotOwner() (gas: 4398)
testFail_reInitPool() (gas: 1818)
testFail_rescueTokensNotOwner() (gas: 5527)
testFail_tradePoolChangeAssetRecipient() (gas: 1657)
testFail_tradePoolChangeFeePastMax() (gas: 1659)
testFail_transferOwnership() (gas: 4459)
testFail_withdraw() (gas: 5646)
testGas_basicDeploy() (gas: 205619)
test_callMint721() (gas: 142896)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 7311)
test_modifyPairParams() (gas: 32027)
test_rescueTokens() (gas: 131534)
test_transferOwnership() (gas: 3307)
test_verifyPoolParams() (gas: 15401)
test_withdraw() (gas: 8264)
test_withdrawFees() (gas: 201685)
testFail_callMint721() (gas: 5577)
testFail_changeAssetRecipientForTrade() (gas: 1699)
testFail_changeDeltaNotOwner() (gas: 4479)
testFail_changeFeeAboveMax() (gas: 1634)
testFail_changeFeeNotOwner() (gas: 4436)
testFail_changeSpotNotOwner() (gas: 4414)
testFail_reInitPool() (gas: 1815)
testFail_rescueTokensNotOwner() (gas: 5543)
testFail_tradePoolChangeAssetRecipient() (gas: 1676)
testFail_tradePoolChangeFeePastMax() (gas: 1656)
testFail_transferOwnership() (gas: 4497)
testFail_withdraw() (gas: 4401)
testGas_basicDeploy() (gas: 161708)
test_callMint721() (gas: 142893)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 7308)
test_modifyPairParams() (gas: 31998)
test_rescueTokens() (gas: 131482)
test_transferOwnership() (gas: 3326)
test_verifyPoolParams() (gas: 14429)
test_withdraw() (gas: 9942)
test_withdrawFees() (gas: 192273)
testFail_callMint721() (gas: 5580)
testFail_changeAssetRecipientForTrade() (gas: 1680)
testFail_changeDeltaNotOwner() (gas: 4463)
testFail_changeFeeAboveMax() (gas: 1637)
testFail_changeFeeNotOwner() (gas: 4420)
testFail_changeSpotNotOwner() (gas: 4398)
testFail_reInitPool() (gas: 1818)
testFail_rescueTokensNotOwner() (gas: 5527)
testFail_tradePoolChangeAssetRecipient() (gas: 1657)
testFail_tradePoolChangeFeePastMax() (gas: 1659)
testFail_transferOwnership() (gas: 4459)
testFail_withdraw() (gas: 5646)
testGas_basicDeploy() (gas: 205512)
test_callMint721() (gas: 75470)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 4603)
test_modifyPairParams() (gas: 32027)
test_rescueTokens() (gas: 71097)
test_transferOwnership() (gas: 3307)
test_verifyPoolParams() (gas: 15357)
test_withdraw() (gas: 8264)
test_withdrawFees() (gas: 138655)
testFail_callMint721() (gas: 5577)
testFail_changeAssetRecipientForTrade() (gas: 1699)
testFail_changeDeltaNotOwner() (gas: 4479)
testFail_changeFeeAboveMax() (gas: 1634)
testFail_changeFeeNotOwner() (gas: 4436)
testFail_changeSpotNotOwner() (gas: 4414)
testFail_reInitPool() (gas: 1815)
testFail_rescueTokensNotOwner() (gas: 5543)
testFail_tradePoolChangeAssetRecipient() (gas: 1676)
testFail_tradePoolChangeFeePastMax() (gas: 1656)
testFail_transferOwnership() (gas: 4497)
testFail_withdraw() (gas: 4401)
testGas_basicDeploy() (gas: 161601)
test_callMint721() (gas: 75467)
test_changeFeeMultiplier() (gas: 2140)
test_changeFeeRecipient() (gas: 2466)
test_getAllHeldNFTs() (gas: 4600)
test_modifyPairParams() (gas: 31998)
test_rescueTokens() (gas: 71045)
test_transferOwnership() (gas: 3326)
test_verifyPoolParams() (gas: 14385)
test_withdraw() (gas: 9942)
test_withdrawFees() (gas: 129241)
test_swap5NFTsForToken() (gas: 451730)
test_swapTokenForAny5NFTs() (gas: 452133)
test_swapTokenForSpecific5NFTs() (gas: 458316)
test_swap5NFTsForToken() (gas: 461918)
test_swapTokenForAny5NFTs() (gas: 447251)
test_swapTokenForSpecific5NFTs() (gas: 455132)
test_swap5NFTsForToken() (gas: 457872)
test_swapTokenForAny5NFTs() (gas: 247235)
test_swapTokenForSpecific5NFTs() (gas: 256983)
test_swap5NFTsForToken() (gas: 468060)
test_swapTokenForAny5NFTs() (gas: 241888)
test_swapTokenForSpecific5NFTs() (gas: 253349)
test_swap5NFTsForToken() (gas: 450470)
test_swapTokenForAny5NFTs() (gas: 451413)
test_swapTokenForSpecific5NFTs() (gas: 457596)
test_swap5NFTsForToken() (gas: 460658)
test_swapTokenForAny5NFTs() (gas: 446171)
test_swapTokenForSpecific5NFTs() (gas: 454052)
test_swap5NFTsForToken() (gas: 456612)
test_swapTokenForAny5NFTs() (gas: 246515)
test_swapTokenForSpecific5NFTs() (gas: 256263)
test_swap5NFTsForToken() (gas: 466800)
test_swapTokenForAny5NFTs() (gas: 240808)
test_swapTokenForSpecific5NFTs() (gas: 252269)
test_robustSwapNFTsForToken() (gas: 329624)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 186746)
test_robustSwapTokenForAnyNFTs() (gas: 321571)
test_robustSwapTokenForSpecificNFTs() (gas: 324458)
test_robustSwapNFTsForToken() (gas: 320756)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 171300)
test_robustSwapTokenForAnyNFTs() (gas: 311930)
test_robustSwapTokenForSpecificNFTs() (gas: 314794)
test_robustSwapNFTsForToken() (gas: 332192)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 187986)
test_robustSwapTokenForAnyNFTs() (gas: 146331)
test_robustSwapTokenForSpecificNFTs() (gas: 175604)
test_robustSwapNFTsForToken() (gas: 323324)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 172540)
test_robustSwapTokenForAnyNFTs() (gas: 136504)
test_robustSwapTokenForSpecificNFTs() (gas: 165760)
test_robustSwapNFTsForToken() (gas: 327639)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 185577)
test_robustSwapTokenForAnyNFTs() (gas: 319856)
test_robustSwapTokenForSpecificNFTs() (gas: 322743)
test_robustSwapNFTsForToken() (gas: 318771)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 170131)
test_robustSwapTokenForAnyNFTs() (gas: 310215)
test_robustSwapTokenForSpecificNFTs() (gas: 313079)
test_robustSwapNFTsForToken() (gas: 330207)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 186817)
test_robustSwapTokenForAnyNFTs() (gas: 144616)
test_robustSwapTokenForSpecificNFTs() (gas: 173889)
test_robustSwapNFTsForToken() (gas: 321339)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 171371)
test_robustSwapTokenForAnyNFTs() (gas: 134789)
test_robustSwapTokenForSpecificNFTs() (gas: 164045)
test_robustSwapNFTsForToken() (gas: 100697)
test_robustSwapTokenForAnyNFTs() (gas: 131431)
test_robustSwapTokenForSpecificNFTs() (gas: 134310)
test_robustSwapNFTsForToken() (gas: 104364)
test_robustSwapTokenForAnyNFTs() (gas: 148905)
test_robustSwapTokenForSpecificNFTs() (gas: 151752)
test_robustSwapNFTsForToken() (gas: 76286)
test_robustSwapTokenForAnyNFTs() (gas: 90469)
test_robustSwapTokenForSpecificNFTs() (gas: 94061)
test_robustSwapNFTsForToken() (gas: 79953)
test_robustSwapTokenForAnyNFTs() (gas: 107850)
test_robustSwapTokenForSpecificNFTs() (gas: 111413)
test_robustSwapNFTsForToken() (gas: 100193)
test_robustSwapTokenForAnyNFTs() (gas: 131143)
test_robustSwapTokenForSpecificNFTs() (gas: 134022)
test_robustSwapNFTsForToken() (gas: 103860)
test_robustSwapTokenForAnyNFTs() (gas: 148617)
test_robustSwapTokenForSpecificNFTs() (gas: 151464)
test_robustSwapNFTsForToken() (gas: 75782)
test_robustSwapTokenForAnyNFTs() (gas: 90181)
test_robustSwapTokenForSpecificNFTs() (gas: 93773)
test_robustSwapNFTsForToken() (gas: 79449)
test_robustSwapTokenForAnyNFTs() (gas: 107562)
test_robustSwapTokenForSpecificNFTs() (gas: 111125)
testFail_swapSingleNFTForToken() (gas: 109030)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9507)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 112006)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 113240)
testGas_swapSingleNFTForToken5Times() (gas: 434046)
test_swap5NFTsForToken() (gas: 351701)
test_swapSingleNFTForAnyNFT() (gas: 188431)
test_swapSingleNFTForSpecificNFT() (gas: 189642)
test_swapSingleNFTForToken() (gas: 104364)
test_swapTokenForSingleAnyNFT() (gas: 112515)
test_swapTokenForSingleSpecificNFT() (gas: 113662)
test_swapTokenforAny5NFTs() (gas: 334944)
test_swapTokenforSpecific5NFTs() (gas: 332883)
testFail_swapSingleNFTForToken() (gas: 93550)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9458)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 33768)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 35610)
testGas_swapSingleNFTForToken5Times() (gas: 444261)
test_swap5NFTsForToken() (gas: 336675)
test_swapSingleNFTForAnyNFT() (gas: 194165)
test_swapSingleNFTForSpecificNFT() (gas: 195695)
test_swapSingleNFTForToken() (gas: 88887)
test_swapTokenForSingleAnyNFT() (gas: 104811)
test_swapTokenForSingleSpecificNFT() (gas: 106270)
test_swapTokenforAny5NFTs() (gas: 327688)
test_swapTokenforSpecific5NFTs() (gas: 325987)
testFail_swapSingleNFTForToken() (gas: 109694)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9507)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 68362)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 71097)
testGas_swapSingleNFTForToken5Times() (gas: 437366)
test_swap5NFTsForToken() (gas: 355021)
test_swapSingleNFTForAnyNFT() (gas: 147551)
test_swapSingleNFTForSpecificNFT() (gas: 150263)
test_swapSingleNFTForToken() (gas: 105028)
test_swapTokenForSingleAnyNFT() (gas: 68871)
test_swapTokenForSingleSpecificNFT() (gas: 71519)
test_swapTokenforAny5NFTs() (gas: 115483)
test_swapTokenforSpecific5NFTs() (gas: 121892)
testFail_swapSingleNFTForToken() (gas: 94214)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9458)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 33768)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 35610)
testGas_swapSingleNFTForToken5Times() (gas: 447581)
test_swap5NFTsForToken() (gas: 339995)
test_swapSingleNFTForAnyNFT() (gas: 153192)
test_swapSingleNFTForSpecificNFT() (gas: 156226)
test_swapSingleNFTForToken() (gas: 89551)
test_swapTokenForSingleAnyNFT() (gas: 61074)
test_swapTokenForSingleSpecificNFT() (gas: 64037)
test_swapTokenforAny5NFTs() (gas: 108135)
test_swapTokenforSpecific5NFTs() (gas: 114906)
testFail_swapSingleNFTForToken() (gas: 108778)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9381)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 111862)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 113096)
testGas_swapSingleNFTForToken5Times() (gas: 433416)
test_swap5NFTsForToken() (gas: 351126)
test_swapSingleNFTForAnyNFT() (gas: 188233)
test_swapSingleNFTForSpecificNFT() (gas: 189444)
test_swapSingleNFTForToken() (gas: 104238)
test_swapTokenForSingleAnyNFT() (gas: 112371)
test_swapTokenForSingleSpecificNFT() (gas: 113518)
test_swapTokenforAny5NFTs() (gas: 333902)
test_swapTokenforSpecific5NFTs() (gas: 331841)
testFail_swapSingleNFTForToken() (gas: 93298)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9332)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 33624)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 35466)
testGas_swapSingleNFTForToken5Times() (gas: 443631)
test_swap5NFTsForToken() (gas: 336100)
test_swapSingleNFTForAnyNFT() (gas: 193895)
test_swapSingleNFTForSpecificNFT() (gas: 195425)
test_swapSingleNFTForToken() (gas: 88761)
test_swapTokenForSingleAnyNFT() (gas: 104595)
test_swapTokenForSingleSpecificNFT() (gas: 106054)
test_swapTokenforAny5NFTs() (gas: 326125)
test_swapTokenforSpecific5NFTs() (gas: 324424)
testFail_swapSingleNFTForToken() (gas: 109442)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9381)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 68218)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 70953)
testGas_swapSingleNFTForToken5Times() (gas: 436736)
test_swap5NFTsForToken() (gas: 354446)
test_swapSingleNFTForAnyNFT() (gas: 147353)
test_swapSingleNFTForSpecificNFT() (gas: 150065)
test_swapSingleNFTForToken() (gas: 104902)
test_swapTokenForSingleAnyNFT() (gas: 68727)
test_swapTokenForSingleSpecificNFT() (gas: 71375)
test_swapTokenforAny5NFTs() (gas: 114441)
test_swapTokenforSpecific5NFTs() (gas: 120850)
testFail_swapSingleNFTForToken() (gas: 93962)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9332)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 33624)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 35466)
testGas_swapSingleNFTForToken5Times() (gas: 446951)
test_swap5NFTsForToken() (gas: 339420)
test_swapSingleNFTForAnyNFT() (gas: 152922)
test_swapSingleNFTForSpecificNFT() (gas: 155956)
test_swapSingleNFTForToken() (gas: 89425)
test_swapTokenForSingleAnyNFT() (gas: 60858)
test_swapTokenForSingleSpecificNFT() (gas: 63821)
test_swapTokenforAny5NFTs() (gas: 106572)
test_swapTokenforSpecific5NFTs() (gas: 113343)
test_swap5NFTsForToken() (gas: 342399)
test_swapSingleNFTForAnyNFT() (gas: 199404)
test_swapSingleNFTForSpecificNFT() (gas: 200017)
test_swapSingleNFTForToken() (gas: 102290)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 128940)
test_swapTokenForSingleAnyNFT() (gas: 117646)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 160914)
test_swapTokenForSingleSpecificNFT() (gas: 118821)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 162056)
test_swapTokenforAny5NFTs() (gas: 331942)
test_swapTokenforSpecific5NFTs() (gas: 329798)
test_swap5NFTsForToken() (gas: 346560)
test_swapSingleNFTForAnyNFT() (gas: 225458)
test_swapSingleNFTForSpecificNFT() (gas: 226389)
test_swapSingleNFTForToken() (gas: 105987)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 112512)
test_swapTokenForSingleAnyNFT() (gas: 132999)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 161439)
test_swapTokenForSingleSpecificNFT() (gas: 134463)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 162914)
test_swapTokenforAny5NFTs() (gas: 347743)
test_swapTokenforSpecific5NFTs() (gas: 345936)
test_swap5NFTsForToken() (gas: 130775)
test_swapSingleNFTForAnyNFT() (gas: 133449)
test_swapSingleNFTForSpecificNFT() (gas: 135357)
test_swapSingleNFTForToken() (gas: 67734)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 104573)
test_swapTokenForSingleAnyNFT() (gas: 76102)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 119370)
test_swapTokenForSingleSpecificNFT() (gas: 78778)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 122013)
test_swapTokenforAny5NFTs() (gas: 122981)
test_swapTokenforSpecific5NFTs() (gas: 129307)
test_swap5NFTsForToken() (gas: 134936)
test_swapSingleNFTForAnyNFT() (gas: 159410)
test_swapSingleNFTForSpecificNFT() (gas: 161639)
test_swapSingleNFTForToken() (gas: 71431)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 88145)
test_swapTokenForSingleAnyNFT() (gas: 91362)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 119802)
test_swapTokenForSingleSpecificNFT() (gas: 94330)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 122781)
test_swapTokenforAny5NFTs() (gas: 138690)
test_swapTokenforSpecific5NFTs() (gas: 145355)
test_swap5NFTsForToken() (gas: 341824)
test_swapSingleNFTForAnyNFT() (gas: 199134)
test_swapSingleNFTForSpecificNFT() (gas: 199747)
test_swapSingleNFTForToken() (gas: 102164)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 128814)
test_swapTokenForSingleAnyNFT() (gas: 117502)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 160770)
test_swapTokenForSingleSpecificNFT() (gas: 118677)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 161912)
test_swapTokenforAny5NFTs() (gas: 330900)
test_swapTokenforSpecific5NFTs() (gas: 328756)
test_swap5NFTsForToken() (gas: 345985)
test_swapSingleNFTForAnyNFT() (gas: 225116)
test_swapSingleNFTForSpecificNFT() (gas: 226047)
test_swapSingleNFTForToken() (gas: 105861)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 112386)
test_swapTokenForSingleAnyNFT() (gas: 132783)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 161223)
test_swapTokenForSingleSpecificNFT() (gas: 134247)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 162698)
test_swapTokenforAny5NFTs() (gas: 346180)
test_swapTokenforSpecific5NFTs() (gas: 344373)
test_swap5NFTsForToken() (gas: 130200)
test_swapSingleNFTForAnyNFT() (gas: 133179)
test_swapSingleNFTForSpecificNFT() (gas: 135087)
test_swapSingleNFTForToken() (gas: 67608)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 104447)
test_swapTokenForSingleAnyNFT() (gas: 75958)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 119226)
test_swapTokenForSingleSpecificNFT() (gas: 78634)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 121869)
test_swapTokenforAny5NFTs() (gas: 121939)
test_swapTokenforSpecific5NFTs() (gas: 128265)
test_swap5NFTsForToken() (gas: 134361)
test_swapSingleNFTForAnyNFT() (gas: 159068)
test_swapSingleNFTForSpecificNFT() (gas: 161297)
test_swapSingleNFTForToken() (gas: 71305)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 88019)
test_swapTokenForSingleAnyNFT() (gas: 91146)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 119586)
test_swapTokenForSingleSpecificNFT() (gas: 94114)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 122565)
test_swapTokenforAny5NFTs() (gas: 137127)
test_swapTokenforSpecific5NFTs() (gas: 143792)
test_getBuyInfoExample() (gas: 3933)
test_getBuyInfoWithoutFee(uint128,uint64,uint8) (runs: 256, μ: 451, ~: 245)
test_getSellInfoExample() (gas: 4011)
test_getSellInfoWithoutFee(uint128,uint128,uint8) (runs: 256, μ: 3429, ~: 3430)
test_getBuyInfoExample() (gas: 3339)
test_getBuyInfoWithoutFee(uint128,uint128,uint8) (runs: 256, μ: 3184, ~: 3185)
test_getSellInfoExample() (gas: 3329)
test_getSellInfoWithoutFee(uint128,uint128,uint8) (runs: 256, μ: 3595, ~: 3598)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 894565, ~: 1242221)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 883481, ~: 1232674)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 326338, ~: 390526)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 322366, ~: 392643)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 881931, ~: 1251053)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 831301, ~: 1202512)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 313744, ~: 399418)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 270225, ~: 362541)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 893838, ~: 1241803)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 882813, ~: 1232342)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 324931, ~: 390108)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 321698, ~: 392311)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 881203, ~: 1250635)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 830632, ~: 1202180)
test_bondingCurveBuySellNoProfit(uint56,uint64,uint8) (runs: 256, μ: 312337, ~: 399000)
test_bondingCurveSellBuyNoProfit(uint56,uint64,uint8) (runs: 256, μ: 269557, ~: 362209)
testFail_callMint721() (gas: 5709)
testFail_changeAssetRecipientForTrade() (gas: 1738)
testFail_changeDeltaNotOwner() (gas: 4554)
testFail_changeFeeAboveMax() (gas: 1677)
testFail_changeFeeNotOwner() (gas: 4466)
testFail_changeSpotNotOwner() (gas: 4444)
testFail_reInitPool() (gas: 1793)
testFail_rescueTokensNotOwner() (gas: 5673)
testFail_tradePoolChangeAssetRecipient() (gas: 1670)
testFail_tradePoolChangeFeePastMax() (gas: 1721)
testFail_transferOwnership() (gas: 4517)
testFail_withdraw() (gas: 5791)
testGas_basicDeploy() (gas: 206752)
test_callMint721() (gas: 143403)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 7508)
test_modifyPairParams() (gas: 32353)
test_rescueTokens() (gas: 33440)
test_transferOwnership() (gas: 3354)
test_verifyPoolParams() (gas: 15968)
test_withdraw() (gas: 0)
test_withdrawFees() (gas: 105014)
testFail_callMint721() (gas: 5706)
testFail_changeAssetRecipientForTrade() (gas: 1757)
testFail_changeDeltaNotOwner() (gas: 4570)
testFail_changeFeeAboveMax() (gas: 1674)
testFail_changeFeeNotOwner() (gas: 4482)
testFail_changeSpotNotOwner() (gas: 4460)
testFail_reInitPool() (gas: 1790)
testFail_rescueTokensNotOwner() (gas: 5689)
testFail_tradePoolChangeAssetRecipient() (gas: 1689)
testFail_tradePoolChangeFeePastMax() (gas: 1718)
testFail_transferOwnership() (gas: 4555)
testFail_withdraw() (gas: 4498)
testGas_basicDeploy() (gas: 162396)
test_callMint721() (gas: 143400)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 7478)
test_modifyPairParams() (gas: 32324)
test_rescueTokens() (gas: 33373)
test_transferOwnership() (gas: 3373)
test_verifyPoolParams() (gas: 14951)
test_withdraw() (gas: 10004)
test_withdrawFees() (gas: 115083)
testFail_callMint721() (gas: 5709)
testFail_changeAssetRecipientForTrade() (gas: 1738)
testFail_changeDeltaNotOwner() (gas: 4554)
testFail_changeFeeAboveMax() (gas: 1677)
testFail_changeFeeNotOwner() (gas: 4466)
testFail_changeSpotNotOwner() (gas: 4444)
testFail_reInitPool() (gas: 1793)
testFail_rescueTokensNotOwner() (gas: 5673)
testFail_tradePoolChangeAssetRecipient() (gas: 1670)
testFail_tradePoolChangeFeePastMax() (gas: 1721)
testFail_transferOwnership() (gas: 4517)
testFail_withdraw() (gas: 5791)
testGas_basicDeploy() (gas: 206645)
test_callMint721() (gas: 75893)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 4584)
test_modifyPairParams() (gas: 32353)
test_rescueTokens() (gas: 0)
test_transferOwnership() (gas: 3354)
test_verifyPoolParams() (gas: 15924)
test_withdraw() (gas: 0)
test_withdrawFees() (gas: 1781)
testFail_callMint721() (gas: 5706)
testFail_changeAssetRecipientForTrade() (gas: 1757)
testFail_changeDeltaNotOwner() (gas: 4570)
testFail_changeFeeAboveMax() (gas: 1674)
testFail_changeFeeNotOwner() (gas: 4482)
testFail_changeSpotNotOwner() (gas: 4460)
testFail_reInitPool() (gas: 1790)
testFail_rescueTokensNotOwner() (gas: 5689)
testFail_tradePoolChangeAssetRecipient() (gas: 1689)
testFail_tradePoolChangeFeePastMax() (gas: 1718)
testFail_transferOwnership() (gas: 4555)
testFail_withdraw() (gas: 4498)
testGas_basicDeploy() (gas: 162289)
test_callMint721() (gas: 75890)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 4581)
test_modifyPairParams() (gas: 32324)
test_rescueTokens() (gas: 0)
test_transferOwnership() (gas: 3373)
test_verifyPoolParams() (gas: 14922)
test_withdraw() (gas: 10004)
test_withdrawFees() (gas: 11883)
testFail_callMint721() (gas: 5709)
testFail_changeAssetRecipientForTrade() (gas: 1738)
testFail_changeDeltaNotOwner() (gas: 4554)
testFail_changeFeeAboveMax() (gas: 1677)
testFail_changeFeeNotOwner() (gas: 4466)
testFail_changeSpotNotOwner() (gas: 4444)
testFail_reInitPool() (gas: 1793)
testFail_rescueTokensNotOwner() (gas: 5673)
testFail_tradePoolChangeAssetRecipient() (gas: 1670)
testFail_tradePoolChangeFeePastMax() (gas: 1721)
testFail_transferOwnership() (gas: 4517)
testFail_withdraw() (gas: 5791)
testGas_basicDeploy() (gas: 206747)
test_callMint721() (gas: 143403)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 7508)
test_modifyPairParams() (gas: 32348)
test_rescueTokens() (gas: 33440)
test_transferOwnership() (gas: 3354)
test_verifyPoolParams() (gas: 15968)
test_withdraw() (gas: 0)
test_withdrawFees() (gas: 104398)
testFail_callMint721() (gas: 5706)
testFail_changeAssetRecipientForTrade() (gas: 1757)
testFail_changeDeltaNotOwner() (gas: 4570)
testFail_changeFeeAboveMax() (gas: 1674)
testFail_changeFeeNotOwner() (gas: 4482)
testFail_changeSpotNotOwner() (gas: 4460)
testFail_reInitPool() (gas: 1790)
testFail_rescueTokensNotOwner() (gas: 5689)
testFail_tradePoolChangeAssetRecipient() (gas: 1689)
testFail_tradePoolChangeFeePastMax() (gas: 1718)
testFail_transferOwnership() (gas: 4555)
testFail_withdraw() (gas: 4498)
testGas_basicDeploy() (gas: 162391)
test_callMint721() (gas: 143400)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 7478)
test_modifyPairParams() (gas: 32319)
test_rescueTokens() (gas: 33373)
test_transferOwnership() (gas: 3373)
test_verifyPoolParams() (gas: 14951)
test_withdraw() (gas: 10004)
test_withdrawFees() (gas: 114467)
testFail_callMint721() (gas: 5709)
testFail_changeAssetRecipientForTrade() (gas: 1738)
testFail_changeDeltaNotOwner() (gas: 4554)
testFail_changeFeeAboveMax() (gas: 1677)
testFail_changeFeeNotOwner() (gas: 4466)
testFail_changeSpotNotOwner() (gas: 4444)
testFail_reInitPool() (gas: 1793)
testFail_rescueTokensNotOwner() (gas: 5673)
testFail_tradePoolChangeAssetRecipient() (gas: 1670)
testFail_tradePoolChangeFeePastMax() (gas: 1721)
testFail_transferOwnership() (gas: 4517)
testFail_withdraw() (gas: 5791)
testGas_basicDeploy() (gas: 206640)
test_callMint721() (gas: 75893)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 4584)
test_modifyPairParams() (gas: 32348)
test_rescueTokens() (gas: 0)
test_transferOwnership() (gas: 3354)
test_verifyPoolParams() (gas: 15924)
test_withdraw() (gas: 0)
test_withdrawFees() (gas: 1165)
testFail_callMint721() (gas: 5706)
testFail_changeAssetRecipientForTrade() (gas: 1757)
testFail_changeDeltaNotOwner() (gas: 4570)
testFail_changeFeeAboveMax() (gas: 1674)
testFail_changeFeeNotOwner() (gas: 4482)
testFail_changeSpotNotOwner() (gas: 4460)
testFail_reInitPool() (gas: 1790)
testFail_rescueTokensNotOwner() (gas: 5689)
testFail_tradePoolChangeAssetRecipient() (gas: 1689)
testFail_tradePoolChangeFeePastMax() (gas: 1718)
testFail_transferOwnership() (gas: 4555)
testFail_withdraw() (gas: 4498)
testGas_basicDeploy() (gas: 162284)
test_callMint721() (gas: 75890)
test_changeFeeMultiplier() (gas: 2218)
test_changeFeeRecipient() (gas: 2632)
test_getAllHeldNFTs() (gas: 4581)
test_modifyPairParams() (gas: 32319)
test_rescueTokens() (gas: 0)
test_transferOwnership() (gas: 3373)
test_verifyPoolParams() (gas: 14922)
test_withdraw() (gas: 10004)
test_withdrawFees() (gas: 11267)
test_swap5NFTsForToken() (gas: 161421)
test_swapTokenForAny5NFTs() (gas: 263352)
test_swapTokenForSpecific5NFTs() (gas: 269400)
test_swap5NFTsForToken() (gas: 270434)
test_swapTokenForAny5NFTs() (gas: 255123)
test_swapTokenForSpecific5NFTs() (gas: 263057)
test_swap5NFTsForToken() (gas: 346223)
test_swapTokenForAny5NFTs() (gas: 0)
test_swapTokenForSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 455371)
test_swapTokenForAny5NFTs() (gas: 0)
test_swapTokenForSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 160061)
test_swapTokenForAny5NFTs() (gas: 262982)
test_swapTokenForSpecific5NFTs() (gas: 269030)
test_swap5NFTsForToken() (gas: 269074)
test_swapTokenForAny5NFTs() (gas: 254568)
test_swapTokenForSpecific5NFTs() (gas: 262502)
test_swap5NFTsForToken() (gas: 344863)
test_swapTokenForAny5NFTs() (gas: 0)
test_swapTokenForSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 454011)
test_swapTokenForAny5NFTs() (gas: 0)
test_swapTokenForSpecific5NFTs() (gas: 0)
test_robustSwapNFTsForToken() (gas: 175904)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 110220)
test_robustSwapTokenForAnyNFTs() (gas: 168169)
test_robustSwapTokenForSpecificNFTs() (gas: 170901)
test_robustSwapNFTsForToken() (gas: 166766)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 94639)
test_robustSwapTokenForAnyNFTs() (gas: 156986)
test_robustSwapTokenForSpecificNFTs() (gas: 159695)
test_robustSwapNFTsForToken() (gas: 337272)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 190860)
test_robustSwapTokenForAnyNFTs() (gas: 0)
test_robustSwapTokenForSpecificNFTs() (gas: 21423)
test_robustSwapNFTsForToken() (gas: 328188)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 175306)
test_robustSwapTokenForAnyNFTs() (gas: 0)
test_robustSwapTokenForSpecificNFTs() (gas: 10107)
test_robustSwapNFTsForToken() (gas: 173869)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 108999)
test_robustSwapTokenForAnyNFTs() (gas: 166629)
test_robustSwapTokenForSpecificNFTs() (gas: 169361)
test_robustSwapNFTsForToken() (gas: 164731)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 93418)
test_robustSwapTokenForAnyNFTs() (gas: 155446)
test_robustSwapTokenForSpecificNFTs() (gas: 158155)
test_robustSwapNFTsForToken() (gas: 335237)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 189639)
test_robustSwapTokenForAnyNFTs() (gas: 0)
test_robustSwapTokenForSpecificNFTs() (gas: 19883)
test_robustSwapNFTsForToken() (gas: 326153)
test_robustSwapNFTsForTokenWithBondingCurveError() (gas: 174085)
test_robustSwapTokenForAnyNFTs() (gas: 0)
test_robustSwapTokenForSpecificNFTs() (gas: 8567)
test_robustSwapNFTsForToken() (gas: 42863)
test_robustSwapTokenForAnyNFTs() (gas: 94145)
test_robustSwapTokenForSpecificNFTs() (gas: 97035)
test_robustSwapNFTsForToken() (gas: 66370)
test_robustSwapTokenForAnyNFTs() (gas: 110816)
test_robustSwapTokenForSpecificNFTs() (gas: 113674)
test_robustSwapNFTsForToken() (gas: 58096)
test_robustSwapTokenForAnyNFTs() (gas: 13176)
test_robustSwapTokenForSpecificNFTs() (gas: 16842)
test_robustSwapNFTsForToken() (gas: 81630)
test_robustSwapTokenForAnyNFTs() (gas: 29789)
test_robustSwapTokenForSpecificNFTs() (gas: 33426)
test_robustSwapNFTsForToken() (gas: 42319)
test_robustSwapTokenForAnyNFTs() (gas: 93997)
test_robustSwapTokenForSpecificNFTs() (gas: 96887)
test_robustSwapNFTsForToken() (gas: 65826)
test_robustSwapTokenForAnyNFTs() (gas: 110668)
test_robustSwapTokenForSpecificNFTs() (gas: 113526)
test_robustSwapNFTsForToken() (gas: 57552)
test_robustSwapTokenForAnyNFTs() (gas: 13028)
test_robustSwapTokenForSpecificNFTs() (gas: 16694)
test_robustSwapNFTsForToken() (gas: 81086)
test_robustSwapTokenForAnyNFTs() (gas: 29641)
test_robustSwapTokenForSpecificNFTs() (gas: 33278)
testFail_swapSingleNFTForToken() (gas: 110642)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9791)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 114115)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 115296)
testGas_swapSingleNFTForToken5Times() (gas: 242607)
test_swap5NFTsForToken() (gas: 157722)
test_swapSingleNFTForAnyNFT() (gas: 112444)
test_swapSingleNFTForSpecificNFT() (gas: 113585)
test_swapSingleNFTForToken() (gas: 66022)
test_swapTokenForSingleAnyNFT() (gas: 74821)
test_swapTokenForSingleSpecificNFT() (gas: 75915)
test_swapTokenforAny5NFTs() (gas: 140961)
test_swapTokenforSpecific5NFTs() (gas: 138464)
testFail_swapSingleNFTForToken() (gas: 95027)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9742)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 34187)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 36107)
testGas_swapSingleNFTForToken5Times() (gas: 252147)
test_swap5NFTsForToken() (gas: 142561)
test_swapSingleNFTForAnyNFT() (gas: 117385)
test_swapSingleNFTForSpecificNFT() (gas: 118886)
test_swapSingleNFTForToken() (gas: 50410)
test_swapTokenForSingleAnyNFT() (gas: 66434)
test_swapTokenForSingleSpecificNFT() (gas: 67899)
test_swapTokenforAny5NFTs() (gas: 133022)
test_swapTokenforSpecific5NFTs() (gas: 130944)
testFail_swapSingleNFTForToken() (gas: 111206)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9791)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 70252)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 72997)
testGas_swapSingleNFTForToken5Times() (gas: 444427)
test_swap5NFTsForToken() (gas: 359542)
test_swapSingleNFTForAnyNFT() (gas: 111045)
test_swapSingleNFTForSpecificNFT() (gas: 113750)
test_swapSingleNFTForToken() (gas: 106386)
test_swapTokenForSingleAnyNFT() (gas: 30958)
test_swapTokenForSingleSpecificNFT() (gas: 33616)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
testFail_swapSingleNFTForToken() (gas: 95618)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9742)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 34187)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 36107)
testGas_swapSingleNFTForToken5Times() (gas: 454102)
test_swap5NFTsForToken() (gas: 344408)
test_swapSingleNFTForAnyNFT() (gas: 115955)
test_swapSingleNFTForSpecificNFT() (gas: 119023)
test_swapSingleNFTForToken() (gas: 90801)
test_swapTokenForSingleAnyNFT() (gas: 22513)
test_swapTokenForSingleSpecificNFT() (gas: 25545)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
testFail_swapSingleNFTForToken() (gas: 110370)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9655)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 114041)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 115222)
testGas_swapSingleNFTForToken5Times() (gas: 241927)
test_swap5NFTsForToken() (gas: 157137)
test_swapSingleNFTForAnyNFT() (gas: 112271)
test_swapSingleNFTForSpecificNFT() (gas: 113412)
test_swapSingleNFTForToken() (gas: 65886)
test_swapTokenForSingleAnyNFT() (gas: 74747)
test_swapTokenForSingleSpecificNFT() (gas: 75841)
test_swapTokenforAny5NFTs() (gas: 139989)
test_swapTokenforSpecific5NFTs() (gas: 137492)
testFail_swapSingleNFTForToken() (gas: 94755)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9606)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 34113)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 36033)
testGas_swapSingleNFTForToken5Times() (gas: 251467)
test_swap5NFTsForToken() (gas: 141976)
test_swapSingleNFTForAnyNFT() (gas: 117175)
test_swapSingleNFTForSpecificNFT() (gas: 118676)
test_swapSingleNFTForToken() (gas: 50274)
test_swapTokenForSingleAnyNFT() (gas: 66323)
test_swapTokenForSingleSpecificNFT() (gas: 67788)
test_swapTokenforAny5NFTs() (gas: 131564)
test_swapTokenforSpecific5NFTs() (gas: 129486)
testFail_swapSingleNFTForToken() (gas: 110934)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9655)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 70178)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 72923)
testGas_swapSingleNFTForToken5Times() (gas: 443747)
test_swap5NFTsForToken() (gas: 358957)
test_swapSingleNFTForAnyNFT() (gas: 110872)
test_swapSingleNFTForSpecificNFT() (gas: 113577)
test_swapSingleNFTForToken() (gas: 106250)
test_swapTokenForSingleAnyNFT() (gas: 30884)
test_swapTokenForSingleSpecificNFT() (gas: 33542)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
testFail_swapSingleNFTForToken() (gas: 95346)
testFail_swapSingleNFTForTokenWithEmptyList() (gas: 9606)
testFail_swapTokenForSingleAnyNFTSlippage() (gas: 34113)
testFail_swapTokenForSingleSpecificNFTSlippage() (gas: 36033)
testGas_swapSingleNFTForToken5Times() (gas: 453422)
test_swap5NFTsForToken() (gas: 343823)
test_swapSingleNFTForAnyNFT() (gas: 115745)
test_swapSingleNFTForSpecificNFT() (gas: 118813)
test_swapSingleNFTForToken() (gas: 90665)
test_swapTokenForSingleAnyNFT() (gas: 22402)
test_swapTokenForSingleSpecificNFT() (gas: 25434)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 148686)
test_swapSingleNFTForAnyNFT() (gas: 123412)
test_swapSingleNFTForSpecificNFT() (gas: 123949)
test_swapSingleNFTForToken() (gas: 64694)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 90609)
test_swapTokenForSingleAnyNFT() (gas: 79985)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 123411)
test_swapTokenForSingleSpecificNFT() (gas: 81113)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 124506)
test_swapTokenforAny5NFTs() (gas: 138001)
test_swapTokenforSpecific5NFTs() (gas: 135450)
test_swap5NFTsForToken() (gas: 152757)
test_swapSingleNFTForAnyNFT() (gas: 148715)
test_swapSingleNFTForSpecificNFT() (gas: 149608)
test_swapSingleNFTForToken() (gas: 68301)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 74013)
test_swapTokenForSingleAnyNFT() (gas: 94625)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 123175)
test_swapTokenForSingleSpecificNFT() (gas: 96098)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 124659)
test_swapTokenforAny5NFTs() (gas: 153089)
test_swapTokenforSpecific5NFTs() (gas: 150931)
test_swap5NFTsForToken() (gas: 134538)
test_swapSingleNFTForAnyNFT() (gas: 96882)
test_swapSingleNFTForSpecificNFT() (gas: 98789)
test_swapSingleNFTForToken() (gas: 69038)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 105886)
test_swapTokenForSingleAnyNFT() (gas: 38222)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 81648)
test_swapTokenForSingleSpecificNFT() (gas: 40914)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 84307)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 138663)
test_swapSingleNFTForAnyNFT() (gas: 122154)
test_swapSingleNFTForSpecificNFT() (gas: 124420)
test_swapSingleNFTForToken() (gas: 72699)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 89317)
test_swapTokenForSingleAnyNFT() (gas: 52804)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 81354)
test_swapTokenForSingleSpecificNFT() (gas: 55844)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 84405)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 148101)
test_swapSingleNFTForAnyNFT() (gas: 123202)
test_swapSingleNFTForSpecificNFT() (gas: 123739)
test_swapSingleNFTForToken() (gas: 64558)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 90473)
test_swapTokenForSingleAnyNFT() (gas: 79911)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 123337)
test_swapTokenForSingleSpecificNFT() (gas: 81039)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 124432)
test_swapTokenforAny5NFTs() (gas: 137029)
test_swapTokenforSpecific5NFTs() (gas: 134478)
test_swap5NFTsForToken() (gas: 152172)
test_swapSingleNFTForAnyNFT() (gas: 148468)
test_swapSingleNFTForSpecificNFT() (gas: 149361)
test_swapSingleNFTForToken() (gas: 68165)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 73877)
test_swapTokenForSingleAnyNFT() (gas: 94514)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 123064)
test_swapTokenForSingleSpecificNFT() (gas: 95987)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 124548)
test_swapTokenforAny5NFTs() (gas: 151631)
test_swapTokenforSpecific5NFTs() (gas: 149473)
test_swap5NFTsForToken() (gas: 133953)
test_swapSingleNFTForAnyNFT() (gas: 96672)
test_swapSingleNFTForSpecificNFT() (gas: 98579)
test_swapSingleNFTForToken() (gas: 68902)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 105750)
test_swapTokenForSingleAnyNFT() (gas: 38148)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 81574)
test_swapTokenForSingleSpecificNFT() (gas: 40840)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 84233)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
test_swap5NFTsForToken() (gas: 138078)
test_swapSingleNFTForAnyNFT() (gas: 121907)
test_swapSingleNFTForSpecificNFT() (gas: 124173)
test_swapSingleNFTForToken() (gas: 72563)
test_swapSingleNFTForTokenWithProtocolFee() (gas: 89181)
test_swapTokenForSingleAnyNFT() (gas: 52693)
test_swapTokenForSingleAnyNFTWithProtocolFee() (gas: 81243)
test_swapTokenForSingleSpecificNFT() (gas: 55733)
test_swapTokenForSingleSpecificNFTWithProtocolFee() (gas: 84294)
test_swapTokenforAny5NFTs() (gas: 0)
test_swapTokenforSpecific5NFTs() (gas: 0)
+5 -1
View File
@@ -6,7 +6,7 @@ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
// @dev Solmate's ERC20 is used instead of OZ's ERC20 so we can use safeTransferLib for cheaper safeTransfers for
// @dev Solmate's ERC20 is used instead of OZ's ERC20 so we can use safeTransferLib for cheaper safeTransfers for
// ETH and ERC20 tokens
import {ERC20} from "solmate/tokens/ERC20.sol";
import {SafeTransferLib} from "solmate/utils/SafeTransferLib.sol";
@@ -235,24 +235,28 @@ contract LSSVMPairFactory is Ownable, LSSVMPairFactoryLike {
if (variant == PairVariant.ENUMERABLE_ERC20) {
return
LSSVMPairCloner.isERC20PairClone(
address(this),
address(enumerableERC20Template),
potentialPair
);
} else if (variant == PairVariant.MISSING_ENUMERABLE_ERC20) {
return
LSSVMPairCloner.isERC20PairClone(
address(this),
address(missingEnumerableERC20Template),
potentialPair
);
} else if (variant == PairVariant.ENUMERABLE_ETH) {
return
LSSVMPairCloner.isETHPairClone(
address(this),
address(enumerableETHTemplate),
potentialPair
);
} else if (variant == PairVariant.MISSING_ENUMERABLE_ETH) {
return
LSSVMPairCloner.isETHPairClone(
address(this),
address(missingEnumerableETHTemplate),
potentialPair
);
+129 -124
View File
@@ -29,76 +29,74 @@ library LSSVMPairCloner {
let ptr := mload(0x40)
// -------------------------------------------------------------------------------------------------------------
// CREATION (11 bytes)
// CREATION (9 bytes)
// -------------------------------------------------------------------------------------------------------------
// creation size = 0a
// runtime size = 73
// 3d | RETURNDATASIZE | 0 |
// 60 runtime | PUSH1 runtime (r) | r 0 |
// 80 | DUP1 | r r 0 |
// 60 creation | PUSH1 creation (c) | c r r 0 |
// 3d | RETURNDATASIZE | 0 c r r 0 |
// 39 | CODECOPY | r 0 | [0-2d]: runtime code
// 81 | DUP2 | 0 c 0 | [0-2d]: runtime code
// f3 | RETURN | 0 | [0-2d]: runtime code
// creation size = 09
// runtime size = 72
// 60 runtime | PUSH1 runtime (r) | r |
// 3d | RETURNDATASIZE | 0 r |
// 81 | DUP2 | r 0 r |
// 60 creation | PUSH1 creation (c) | c r 0 r |
// 3d | RETURNDATASIZE | 0 c r 0 r |
// 39 | CODECOPY | 0 r | [0-runSize): runtime code
// f3 | RETURN | | [0-runSize): runtime code
// -------------------------------------------------------------------------------------------------------------
// RUNTIME (54 bytes of code + 61 bytes of extra data = 115 bytes)
// RUNTIME (53 bytes of code + 61 bytes of extra data = 114 bytes)
// -------------------------------------------------------------------------------------------------------------
// extra data size = 3d
// 36 | CALLDATASIZE | cds |
// 3d | RETURNDATASIZE | 0 cds |
// 3d | RETURNDATASIZE | 0 0 cds |
// 37 | CALLDATACOPY | | [0, cds] = calldata
// 60 extra | PUSH1 extra | extra | [0, cds] = calldata
// 60 0x36 | PUSH1 0x36 | 0x36 extra | [0, cds] = calldata // 0x36 (54) is runtime size - data
// 36 | CALLDATASIZE | cds 0x36 extra | [0, cds] = calldata
// 39 | CODECOPY | _ | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 0 0 | [0, cds] = calldata
// 36 | CALLDATASIZE | cds 0 0 0 | [0, cds] = calldata
// 60 extra | PUSH1 extra | extra cds 0 0 0 | [0, cds] = calldata
// 01 | ADD | cds+extra 0 0 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 cds 0 0 0 | [0, cds] = calldata
// 73 addr | PUSH20 0x123… | addr 0 cds 0 0 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 |
// 3d | RETURNDATASIZE | 0 0 |
// 3d | RETURNDATASIZE | 0 0 0 |
// 3d | RETURNDATASIZE | 0 0 0 0 |
// 36 | CALLDATASIZE | cds 0 0 0 0 |
// 3d | RETURNDATASIZE | 0 cds 0 0 0 0 |
// 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 |
// 37 | CALLDATACOPY | 0 0 0 0 | [0, cds) = calldata
// 60 extra | PUSH1 extra | extra 0 0 0 0 | [0, cds) = calldata
// 60 0x35 | PUSH1 0x35 | 0x35 extra 0 0 0 0 | [0, cds) = calldata // 0x35 (53) is runtime size - data
// 36 | CALLDATASIZE | cds 0x35 extra 0 0 0 0 | [0, cds) = calldata
// 39 | CODECOPY | 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 36 | CALLDATASIZE | cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 60 extra | PUSH1 extra | extra cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 01 | ADD | cds+extra 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 73 addr | PUSH20 0x123… | addr 0 cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
mstore(
ptr,
hex"3d_60_73_80_60_0a_3d_39_81_f3_36_3d_3d_37_60_3d_60_36_36_39_3d_3d_3d_36_60_3d_01_3d_73_00_00_00"
hex"60_72_3d_81_60_09_3d_39_f3_3d_3d_3d_3d_36_3d_3d_37_60_3d_60_35_36_39_36_60_3d_01_3d_73_00_00_00"
)
mstore(add(ptr, 0x1d), shl(0x60, implementation))
// 5a | GAS | gas addr 0 cds 0 0 0 | [0, cds] = calldata
// f4 | DELEGATECALL | success 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | rds success 0 | [0, cds] = calldata
// 82 | DUP3 | 0 rds success 0 | [0, cds] = calldata
// 80 | DUP1 | 0 0 rds success 0 | [0, cds] = calldata
// 3e | RETURNDATACOPY | success 0 | [0, rds] = return data (there might be some irrelevant leftovers in memory [rds, cds] when rds < cds)
// 90 | SWAP1 | 0 success | [0, rds] = return data
// 3d | RETURNDATASIZE | rds 0 success | [0, rds] = return data
// 91 | SWAP2 | success 0 rds | [0, rds] = return data
// 60 0x36 | PUSH1 0x36 | 0x36 success 0 rds | [0, rds] = return data
// 57 | JUMPI | 0 rds | [0, rds] = return data
// fd | REVERT | – | [0, rds] = return data
// 5b | JUMPDEST | 0 rds | [0, rds] = return data
// f3 | RETURN | | [0, rds] = return data
// 5a | GAS | gas addr 0 cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// f4 | DELEGATECALL | success 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3d | RETURNDATASIZE | rds success 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3d | RETURNDATASIZE | rds rds success 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 93 | SWAP4 | 0 rds success 0 rds | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 80 | DUP1 | 0 0 rds success 0 rds | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3e | RETURNDATACOPY | success 0 rds | [0, rds) = return data (there might be some irrelevant leftovers in memory [rds, cds+0x37) when rds < cds+0x37)
// 60 0x33 | PUSH1 0x33 | 0x33 sucess 0 rds | [0, rds) = return data
// 57 | JUMPI | 0 rds | [0, rds) = return data
// fd | REVERT | | [0, rds) = return data
// 5b | JUMPDEST | 0 rds | [0, rds) = return data
// f3 | RETURN | – | [0, rds) = return data
mstore(
add(ptr, 0x31),
0x5af43d82803e903d91603457fd5bf30000000000000000000000000000000000
hex"5a_f4_3d_3d_93_80_3e_60_33_57_fd_5b_f3_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00"
)
// -------------------------------------------------------------------------------------------------------------
// EXTRA DATA (61 bytes)
// -------------------------------------------------------------------------------------------------------------
mstore(add(ptr, 0x40), shl(0x60, factory))
mstore(add(ptr, 0x54), shl(0x60, bondingCurve))
mstore(add(ptr, 0x68), shl(0x60, nft))
mstore8(add(ptr, 0x7c), poolType)
mstore(add(ptr, 0x3e), shl(0x60, factory))
mstore(add(ptr, 0x52), shl(0x60, bondingCurve))
mstore(add(ptr, 0x66), shl(0x60, nft))
mstore8(add(ptr, 0x7a), poolType)
instance := create(0, ptr, 0x7d)
instance := create(0, ptr, 0x7b)
}
}
@@ -122,111 +120,114 @@ library LSSVMPairCloner {
let ptr := mload(0x40)
// -------------------------------------------------------------------------------------------------------------
// CREATION (11 bytes)
// CREATION (9 bytes)
// -------------------------------------------------------------------------------------------------------------
// creation size = 0a
// runtime size = 87
// 3d | RETURNDATASIZE | 0 |
// 60 runtime | PUSH1 runtime (r) | r 0 |
// 80 | DUP1 | r r 0 |
// 60 creation | PUSH1 creation (c) | c r r 0 |
// 3d | RETURNDATASIZE | 0 c r r 0 |
// 39 | CODECOPY | r 0 | [0-2d]: runtime code
// 81 | DUP2 | 0 c 0 | [0-2d]: runtime code
// f3 | RETURN | 0 | [0-2d]: runtime code
// creation size = 09
// runtime size = 86
// 60 runtime | PUSH1 runtime (r) | r |
// 3d | RETURNDATASIZE | 0 r |
// 81 | DUP2 | r 0 r |
// 60 creation | PUSH1 creation (c) | c r 0 r |
// 3d | RETURNDATASIZE | 0 c r 0 r |
// 39 | CODECOPY | 0 r | [0-runSize): runtime code
// f3 | RETURN | | [0-runSize): runtime code
// -------------------------------------------------------------------------------------------------------------
// RUNTIME (54 bytes of code + 81 bytes of extra data = 135 bytes)
// RUNTIME (53 bytes of code + 81 bytes of extra data = 134 bytes)
// -------------------------------------------------------------------------------------------------------------
// extra data size = 51
// 36 | CALLDATASIZE | cds |
// 3d | RETURNDATASIZE | 0 cds |
// 3d | RETURNDATASIZE | 0 0 cds |
// 37 | CALLDATACOPY | | [0, cds] = calldata
// 60 extra | PUSH1 extra | extra | [0, cds] = calldata
// 60 0x36 | PUSH1 0x36 | 0x36 extra | [0, cds] = calldata // 0x36 (54) is runtime size - data
// 36 | CALLDATASIZE | cds 0x36 extra | [0, cds] = calldata
// 39 | CODECOPY | _ | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 0 0 | [0, cds] = calldata
// 36 | CALLDATASIZE | cds 0 0 0 | [0, cds] = calldata
// 60 extra | PUSH1 extra | extra cds 0 0 0 | [0, cds] = calldata
// 01 | ADD | cds+extra 0 0 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 cds 0 0 0 | [0, cds] = calldata
// 73 addr | PUSH20 0x123… | addr 0 cds 0 0 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | 0 |
// 3d | RETURNDATASIZE | 0 0 |
// 3d | RETURNDATASIZE | 0 0 0 |
// 3d | RETURNDATASIZE | 0 0 0 0 |
// 36 | CALLDATASIZE | cds 0 0 0 0 |
// 3d | RETURNDATASIZE | 0 cds 0 0 0 0 |
// 3d | RETURNDATASIZE | 0 0 cds 0 0 0 0 |
// 37 | CALLDATACOPY | 0 0 0 0 | [0, cds) = calldata
// 60 extra | PUSH1 extra | extra 0 0 0 0 | [0, cds) = calldata
// 60 0x35 | PUSH1 0x35 | 0x35 extra 0 0 0 0 | [0, cds) = calldata // 0x35 (53) is runtime size - data
// 36 | CALLDATASIZE | cds 0x35 extra 0 0 0 0 | [0, cds) = calldata
// 39 | CODECOPY | 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 36 | CALLDATASIZE | cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 60 extra | PUSH1 extra | extra cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 01 | ADD | cds+extra 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3d | RETURNDATASIZE | 0 cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 73 addr | PUSH20 0x123… | addr 0 cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
mstore(
ptr,
hex"3d_60_87_80_60_0a_3d_39_81_f3_36_3d_3d_37_60_51_60_36_36_39_3d_3d_3d_36_60_51_01_3d_73_00_00_00"
hex"60_86_3d_81_60_09_3d_39_f3_3d_3d_3d_3d_36_3d_3d_37_60_51_60_35_36_39_36_60_51_01_3d_73_00_00_00"
)
mstore(add(ptr, 0x1d), shl(0x60, implementation))
// 5a | GAS | gas addr 0 cds 0 0 0 | [0, cds] = calldata
// f4 | DELEGATECALL | success 0 | [0, cds] = calldata
// 3d | RETURNDATASIZE | rds success 0 | [0, cds] = calldata
// 82 | DUP3 | 0 rds success 0 | [0, cds] = calldata
// 80 | DUP1 | 0 0 rds success 0 | [0, cds] = calldata
// 3e | RETURNDATACOPY | success 0 | [0, rds] = return data (there might be some irrelevant leftovers in memory [rds, cds] when rds < cds)
// 90 | SWAP1 | 0 success | [0, rds] = return data
// 3d | RETURNDATASIZE | rds 0 success | [0, rds] = return data
// 91 | SWAP2 | success 0 rds | [0, rds] = return data
// 60 0x36 | PUSH1 0x36 | 0x36 success 0 rds | [0, rds] = return data
// 57 | JUMPI | 0 rds | [0, rds] = return data
// fd | REVERT | – | [0, rds] = return data
// 5b | JUMPDEST | 0 rds | [0, rds] = return data
// f3 | RETURN | | [0, rds] = return data
// 5a | GAS | gas addr 0 cds 0 0 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// f4 | DELEGATECALL | success 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3d | RETURNDATASIZE | rds success 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3d | RETURNDATASIZE | rds rds success 0 0 | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 93 | SWAP4 | 0 rds success 0 rds | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 80 | DUP1 | 0 0 rds success 0 rds | [0, cds) = calldata, [cds, cds+0x35) = extraData
// 3e | RETURNDATACOPY | success 0 rds | [0, rds) = return data (there might be some irrelevant leftovers in memory [rds, cds+0x37) when rds < cds+0x37)
// 60 0x33 | PUSH1 0x33 | 0x33 sucess 0 rds | [0, rds) = return data
// 57 | JUMPI | 0 rds | [0, rds) = return data
// fd | REVERT | | [0, rds) = return data
// 5b | JUMPDEST | 0 rds | [0, rds) = return data
// f3 | RETURN | – | [0, rds) = return data
mstore(
add(ptr, 0x31),
0x5af43d82803e903d91603457fd5bf30000000000000000000000000000000000
hex"5a_f4_3d_3d_93_80_3e_60_33_57_fd_5b_f3_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00"
)
// -------------------------------------------------------------------------------------------------------------
// EXTRA DATA (61 bytes)
// EXTRA DATA (81 bytes)
// -------------------------------------------------------------------------------------------------------------
mstore(add(ptr, 0x40), shl(0x60, factory))
mstore(add(ptr, 0x54), shl(0x60, bondingCurve))
mstore(add(ptr, 0x68), shl(0x60, nft))
mstore8(add(ptr, 0x7c), poolType)
mstore(add(ptr, 0x7d), shl(0x60, token))
mstore(add(ptr, 0x3e), shl(0x60, factory))
mstore(add(ptr, 0x52), shl(0x60, bondingCurve))
mstore(add(ptr, 0x66), shl(0x60, nft))
mstore8(add(ptr, 0x7a), poolType)
mstore(add(ptr, 0x7b), shl(0x60, token))
instance := create(0, ptr, 0x91)
instance := create(0, ptr, 0x8f)
}
}
/**
* @notice Checks if a contract is a clone of a LSSVMPairETH.
* @dev Only checks the runtime bytecode, does not check the extra data.
* @param factory the factory that deployed the clone
* @param implementation the LSSVMPairETH implementation contract
* @param query the contract to check
* @return result True if the contract is a clone, false otherwise
*/
function isETHPairClone(address implementation, address query)
internal
view
returns (bool result)
{
function isETHPairClone(
address factory,
address implementation,
address query
) internal view returns (bool result) {
// solhint-disable-next-line no-inline-assembly
assembly {
let ptr := mload(0x40)
mstore(
ptr,
hex"36_3d_3d_37_60_3d_60_36_36_39_3d_3d_3d_36_60_3d_01_3d_73_00_00_00_00_00_00_00_00_00_00_00_00_00"
hex"3d_3d_3d_3d_36_3d_3d_37_60_3d_60_35_36_39_36_60_3d_01_3d_73_00_00_00_00_00_00_00_00_00_00_00_00"
)
mstore(add(ptr, 0x13), shl(0x60, implementation))
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(
add(ptr, 0x27),
0x5af43d82803e903d91603457fd5bf30000000000000000000000000000000000
add(ptr, 0x28),
hex"5a_f4_3d_3d_93_80_3e_60_33_57_fd_5b_f3_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00"
)
mstore(add(ptr, 0x35), shl(0x60, factory))
// compare expected bytecode with that of the queried contract
let other := add(ptr, 0x40)
extcodecopy(query, other, 0, 0x36)
let other := add(ptr, 0x49)
extcodecopy(query, other, 0, 0x49)
result := and(
eq(mload(ptr), mload(other)),
eq(mload(add(ptr, 0x16)), mload(add(other, 0x16)))
and(
eq(mload(add(ptr, 0x20)), mload(add(other, 0x20))),
eq(mload(add(ptr, 0x29)), mload(add(other, 0x29)))
)
)
}
}
@@ -238,30 +239,34 @@ library LSSVMPairCloner {
* @param query the contract to check
* @return result True if the contract is a clone, false otherwise
*/
function isERC20PairClone(address implementation, address query)
internal
view
returns (bool result)
{
function isERC20PairClone(
address factory,
address implementation,
address query
) internal view returns (bool result) {
// solhint-disable-next-line no-inline-assembly
assembly {
let ptr := mload(0x40)
mstore(
ptr,
hex"36_3d_3d_37_60_51_60_36_36_39_3d_3d_3d_36_60_51_01_3d_73_00_00_00_00_00_00_00_00_00_00_00_00_00"
hex"3d_3d_3d_3d_36_3d_3d_37_60_51_60_35_36_39_36_60_51_01_3d_73_00_00_00_00_00_00_00_00_00_00_00_00"
)
mstore(add(ptr, 0x13), shl(0x60, implementation))
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(
add(ptr, 0x27),
0x5af43d82803e903d91603457fd5bf30000000000000000000000000000000000
add(ptr, 0x28),
hex"5a_f4_3d_3d_93_80_3e_60_33_57_fd_5b_f3_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00"
)
mstore(add(ptr, 0x35), shl(0x60, factory))
// compare expected bytecode with that of the queried contract
let other := add(ptr, 0x40)
extcodecopy(query, other, 0, 0x36)
let other := add(ptr, 0x49)
extcodecopy(query, other, 0, 0x49)
result := and(
eq(mload(ptr), mload(other)),
eq(mload(add(ptr, 0x16)), mload(add(other, 0x16)))
and(
eq(mload(add(ptr, 0x20)), mload(add(other, 0x20))),
eq(mload(add(ptr, 0x29)), mload(add(other, 0x29)))
)
)
}
}