diff --git a/lcov.info b/lcov.info index 68baf5da..df0dfe8a 100644 --- a/lcov.info +++ b/lcov.info @@ -1,43 +1,43 @@ TN: SF:script/DeployFactory.sol -DA:27,0 -FN:27,DeployFactoriesWorldChain.setUp +DA:24,0 +FN:24,DeployFactoriesWorldChain.setUp FNDA:0,DeployFactoriesWorldChain.setUp -DA:40,0 -FN:40,DeployFactoriesWorldChain.run +DA:37,0 +FN:37,DeployFactoriesWorldChain.run FNDA:0,DeployFactoriesWorldChain.run +DA:38,0 +DA:39,0 DA:41,0 DA:42,0 -DA:44,0 -DA:45,0 -DA:46,0 +DA:43,0 +DA:50,0 +DA:51,0 +DA:52,0 DA:53,0 DA:54,0 -DA:55,0 DA:56,0 DA:57,0 +DA:58,0 DA:59,0 DA:60,0 DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 +DA:66,0 +DA:67,0 DA:69,0 DA:70,0 +DA:71,0 DA:72,0 DA:73,0 DA:74,0 -DA:75,0 DA:76,0 DA:77,0 +DA:78,0 DA:79,0 DA:80,0 DA:81,0 -DA:82,0 DA:83,0 -DA:84,0 -DA:86,0 -DA:88,0 +DA:85,0 FNF:2 FNH:0 LF:34 @@ -97,87 +97,87 @@ BRH:0 end_of_record TN: SF:src/Airlock.sol -DA:129,8 -FN:129,Airlock.create -FNDA:8,Airlock.create DA:132,8 -BRDA:132,0,0,- -BRDA:132,0,1,- -DA:140,7 -BRDA:140,1,0,- -BRDA:140,1,1,- -DA:148,6 -BRDA:148,2,0,- -BRDA:148,2,1,- -DA:156,7 -BRDA:156,3,0,- -BRDA:156,3,1,- -DA:185,8 -DA:189,4 -DA:191,4 -DA:192,4 -DA:196,4 -DA:199,4 -DA:212,4 -DA:219,1 -FN:219,Airlock.migrate +FN:132,Airlock.create +FNDA:8,Airlock.create +DA:135,8 +BRDA:135,0,0,- +BRDA:135,0,1,- +DA:143,7 +BRDA:143,1,0,- +BRDA:143,1,1,- +DA:151,6 +BRDA:151,2,0,- +BRDA:151,2,1,- +DA:159,7 +BRDA:159,3,0,- +BRDA:159,3,1,- +DA:168,8 +DA:172,4 +DA:174,4 +DA:175,4 +DA:179,4 +DA:182,4 +DA:195,4 +DA:202,1 +FN:202,Airlock.migrate FNDA:1,Airlock.migrate -DA:222,1 +DA:205,1 +DA:207,1 +DA:208,1 +DA:210,1 +DA:218,1 +DA:220,1 +DA:221,1 +DA:223,1 DA:224,1 -DA:225,1 +DA:226,1 DA:227,1 +DA:229,1 +DA:230,1 +DA:232,1 +DA:233,1 +DA:234,1 DA:235,1 DA:237,1 DA:238,1 DA:240,1 -DA:241,1 +BRDA:240,4,0,- +BRDA:240,4,1,1 +DA:241,0 DA:243,1 -DA:244,1 -DA:246,1 +DA:246,0 DA:247,1 DA:249,1 -DA:250,1 DA:251,1 -DA:252,1 -DA:254,1 -DA:255,1 -DA:257,1 -BRDA:257,4,0,- -BRDA:257,4,1,1 -DA:258,0 -DA:260,1 -DA:263,0 -DA:264,1 -DA:266,1 -DA:268,1 -DA:276,16 -FN:276,Airlock.setModuleState -FNDA:16,Airlock.setModuleState -DA:277,16 -DA:279,16 -BRDA:279,5,0,- -DA:280,0 -DA:283,16 -DA:284,68 -DA:285,68 -DA:295,0 -FN:295,Airlock.collectProtocolFees -FNDA:0,Airlock.collectProtocolFees -DA:296,0 -DA:297,0 -DA:298,0 -DA:307,0 -FN:307,Airlock.collectIntegratorFees -FNDA:0,Airlock.collectIntegratorFees -DA:308,0 -DA:309,0 -DA:310,0 +DA:259,22 +FN:259,Airlock.setModuleState +FNDA:22,Airlock.setModuleState +DA:260,22 +DA:262,22 +BRDA:262,5,0,1 +DA:263,1 +DA:266,21 +DA:267,93 +DA:268,93 +DA:278,1 +FN:278,Airlock.collectProtocolFees +FNDA:1,Airlock.collectProtocolFees +DA:279,1 +DA:280,1 +DA:281,1 +DA:290,2 +FN:290,Airlock.collectIntegratorFees +FNDA:2,Airlock.collectIntegratorFees +DA:291,2 +DA:292,1 +DA:293,2 FNF:5 -FNH:3 +FNH:5 LF:54 -LH:43 +LH:52 BRF:11 -BRH:1 +BRH:2 end_of_record TN: SF:src/DERC20.sol @@ -266,567 +266,571 @@ BRH:5 end_of_record TN: SF:src/Doppler.sol -DA:151,2 -FN:151,Doppler.receive +DA:159,2 +FN:159,Doppler.receive FNDA:2,Doppler.receive -DA:152,2 -BRDA:152,0,0,1 -DA:170,60 -FN:170,Doppler.constructor +DA:160,2 +BRDA:160,0,0,1 +DA:177,60 +FN:177,Doppler.constructor FNDA:60,Doppler.constructor -DA:186,60 -BRDA:186,1,0,- -DA:190,60 -BRDA:190,2,0,60 -DA:191,60 -BRDA:191,3,0,- -DA:192,60 -BRDA:192,4,0,- +DA:193,60 +BRDA:193,1,0,- DA:197,60 -BRDA:197,5,0,- +BRDA:197,2,0,60 DA:198,60 -DA:201,60 -DA:202,60 -DA:203,0 -BRDA:203,6,0,- -DA:204,0 -DA:207,60 -BRDA:207,7,0,- -DA:210,60 -BRDA:210,8,0,- -DA:211,60 -BRDA:211,9,0,- +BRDA:198,3,0,- +DA:199,60 +BRDA:199,4,0,- +DA:204,60 +BRDA:204,5,0,- +DA:205,60 +DA:208,60 +DA:209,60 +DA:210,0 +BRDA:210,6,0,- +DA:211,0 DA:214,60 -BRDA:214,10,0,- -DA:216,60 +BRDA:214,7,0,- DA:217,60 -DA:220,60 -DA:222,60 +BRDA:217,8,0,- +DA:218,60 +BRDA:218,9,0,- +DA:221,60 +BRDA:221,10,0,- DA:223,60 DA:224,60 -DA:225,60 -DA:226,60 DA:227,60 -DA:228,60 DA:229,60 DA:230,60 DA:231,60 DA:232,60 DA:233,60 +DA:234,60 +DA:235,60 +DA:236,60 DA:237,60 -FN:237,Doppler.beforeInitialize -FNDA:60,Doppler.beforeInitialize -DA:242,0 -BRDA:242,11,0,- -DA:243,60 +DA:238,60 +DA:239,60 +DA:240,60 DA:244,60 -DA:247,60 -BRDA:247,12,0,- -DA:252,60 -BRDA:252,13,0,- +FN:244,Doppler.beforeInitialize +FNDA:60,Doppler.beforeInitialize +DA:249,0 +BRDA:249,11,0,- +DA:250,60 +DA:251,60 DA:254,60 -DA:262,60 -FN:262,Doppler.afterInitialize -FNDA:60,Doppler.afterInitialize -DA:268,60 +BRDA:254,12,0,- +DA:259,60 +BRDA:259,13,0,- +DA:261,60 DA:269,60 -DA:273,0 -FN:273,Doppler.beforeDonate -FNDA:0,Doppler.beforeDonate +FN:269,Doppler.afterInitialize +FNDA:60,Doppler.afterInitialize +DA:275,60 +DA:276,60 DA:280,0 -DA:290,102 -FN:290,Doppler.beforeSwap +FN:280,Doppler.beforeDonate +FNDA:0,Doppler.beforeDonate +DA:287,0 +DA:297,102 +FN:297,Doppler.beforeSwap FNDA:102,Doppler.beforeSwap -DA:296,0 -BRDA:296,14,0,- -DA:298,102 -BRDA:298,15,0,1 -DA:301,101 -BRDA:301,16,0,49 -DA:302,49 -DA:306,51 -BRDA:306,17,0,3 -DA:309,3 -BRDA:309,18,0,2 -BRDA:309,18,1,2 -DA:310,2 -DA:312,2 -DA:313,2 -DA:315,2 -DA:316,2 +DA:303,0 +BRDA:303,14,0,- +DA:305,102 +BRDA:305,15,0,1 +DA:308,101 +BRDA:308,16,0,49 +DA:309,49 +DA:313,51 +BRDA:313,17,0,3 +DA:316,3 +BRDA:316,18,0,2 +BRDA:316,18,1,2 DA:317,2 DA:318,2 -DA:319,6 +DA:319,2 +DA:320,2 +DA:322,2 DA:323,2 DA:324,2 -DA:326,2 -DA:327,2 -DA:328,2 +DA:325,2 +DA:326,6 DA:330,2 -DA:338,2 -DA:343,2 -DA:344,2 +DA:331,2 +DA:333,2 +DA:334,2 +DA:335,2 +DA:337,2 DA:345,2 -DA:349,2 -DA:350,8 -DA:353,1 -DA:358,50 -BRDA:358,19,0,48 -BRDA:358,19,1,- -DA:359,48 -DA:362,2 -BRDA:362,20,0,2 -BRDA:362,20,1,- -DA:363,2 -BRDA:363,21,0,1 -DA:364,1 -DA:367,0 -BRDA:367,22,0,1 -DA:368,1 -DA:373,49 -DA:384,99 -FN:384,Doppler.afterSwap +DA:350,2 +DA:351,2 +DA:352,2 +DA:356,2 +DA:357,8 +DA:360,1 +DA:365,50 +BRDA:365,19,0,48 +BRDA:365,19,1,- +DA:366,48 +DA:369,2 +BRDA:369,20,0,2 +BRDA:369,20,1,- +DA:370,2 +BRDA:370,21,0,1 +DA:371,1 +DA:374,0 +BRDA:374,22,0,1 +DA:375,1 +DA:380,49 +DA:391,99 +FN:391,Doppler.afterSwap FNDA:99,Doppler.afterSwap -DA:392,99 -DA:393,99 -DA:395,99 -DA:396,99 DA:399,99 -BRDA:399,23,0,99 -BRDA:399,23,1,- DA:400,99 -BRDA:400,24,0,2 -DA:402,97 -DA:403,97 -BRDA:403,25,0,88 -BRDA:403,25,1,9 -DA:404,88 -DA:406,9 -DA:407,9 +DA:402,99 +DA:403,99 +DA:406,99 +BRDA:406,23,0,99 +BRDA:406,23,1,- +DA:407,99 +BRDA:407,24,0,2 +DA:409,97 DA:410,97 -DA:411,97 -BRDA:411,26,0,9 -BRDA:411,26,1,88 -DA:412,9 -DA:414,88 -DA:415,88 -DA:418,0 -BRDA:418,27,0,2 -DA:420,0 -DA:421,0 -BRDA:421,28,0,- -BRDA:421,28,1,- -DA:422,0 -DA:424,0 +BRDA:410,25,0,88 +BRDA:410,25,1,9 +DA:411,88 +DA:413,9 +DA:414,9 +DA:417,97 +DA:418,97 +BRDA:418,26,0,9 +BRDA:418,26,1,88 +DA:419,9 +DA:421,88 +DA:422,88 DA:425,0 +BRDA:425,27,0,2 +DA:427,0 DA:428,0 +BRDA:428,28,0,- +BRDA:428,28,1,- DA:429,0 -BRDA:429,29,0,- -BRDA:429,29,1,- -DA:430,0 +DA:431,0 DA:432,0 -DA:433,0 -DA:438,97 -BRDA:438,30,0,- +DA:435,0 +DA:436,0 +BRDA:436,29,0,- +BRDA:436,29,1,- +DA:437,0 DA:439,0 -DA:442,97 -DA:449,2 -FN:449,Doppler.beforeAddLiquidity +DA:440,0 +DA:445,97 +BRDA:445,30,0,- +DA:446,0 +DA:447,0 +DA:450,97 +DA:452,97 +DA:459,2 +FN:459,Doppler.beforeAddLiquidity FNDA:2,Doppler.beforeAddLiquidity -DA:455,2 -BRDA:455,31,0,1 -DA:457,1 -DA:464,48 -FN:464,Doppler._rebalance -FNDA:48,Doppler._rebalance -DA:468,48 -DA:469,48 -DA:471,48 +DA:465,2 +BRDA:465,31,0,1 +DA:467,1 DA:474,48 -DA:476,48 +FN:474,Doppler._rebalance +FNDA:48,Doppler._rebalance DA:478,48 DA:479,48 DA:481,48 -DA:482,48 -DA:483,48 +DA:484,48 DA:486,48 -BRDA:486,32,0,12 -DA:488,12 -DA:490,12 -BRDA:490,33,0,12 -BRDA:490,33,1,- -DA:491,12 -DA:492,0 -BRDA:492,34,0,- -BRDA:492,34,1,- -DA:493,0 -DA:501,0 +DA:488,48 +DA:489,48 +DA:491,48 +DA:492,48 +DA:493,48 +DA:496,48 +BRDA:496,32,0,12 +DA:498,12 +DA:500,12 +BRDA:500,33,0,12 +BRDA:500,33,1,- +DA:501,12 +DA:502,0 +BRDA:502,34,0,- +BRDA:502,34,1,- DA:503,0 -DA:508,0 DA:511,0 DA:513,0 -DA:514,0 -DA:515,0 -DA:522,0 -BRDA:522,35,0,- -BRDA:522,35,1,- +DA:518,0 +DA:521,0 DA:523,0 +DA:524,0 DA:525,0 -DA:528,0 -DA:533,12 -DA:534,12 -DA:538,48 -DA:539,48 -DA:541,48 -DA:544,48 -BRDA:544,36,0,14 -BRDA:544,36,1,- -DA:545,14 -DA:546,14 -DA:547,34 -BRDA:547,37,0,24 -BRDA:547,37,1,- -DA:549,24 -DA:550,24 -DA:553,10 -DA:555,10 -DA:560,10 +DA:532,0 +BRDA:532,35,0,- +BRDA:532,35,1,- +DA:533,0 +DA:535,0 +DA:538,0 +DA:543,12 +DA:544,12 +DA:548,48 +DA:549,48 +DA:551,48 +DA:554,48 +BRDA:554,36,0,14 +BRDA:554,36,1,- +DA:555,14 +DA:556,14 +DA:557,34 +BRDA:557,37,0,24 +BRDA:557,37,1,- +DA:559,24 +DA:560,24 DA:563,10 DA:565,10 -DA:566,10 -DA:567,10 -DA:574,10 -BRDA:574,38,0,10 -BRDA:574,38,1,- +DA:570,10 +DA:573,10 DA:575,10 -DA:577,0 -DA:580,10 -DA:583,48 -DA:585,48 -BRDA:585,39,0,46 -DA:586,46 -DA:589,48 -DA:592,48 -DA:597,48 -BRDA:597,40,0,34 -DA:598,34 -BRDA:598,41,0,34 -BRDA:598,41,1,- -DA:599,34 -DA:601,0 -DA:605,48 -DA:606,48 -DA:608,48 -DA:609,48 -DA:612,48 -DA:613,48 -DA:614,48 +DA:576,10 +DA:577,10 +DA:584,10 +BRDA:584,38,0,10 +BRDA:584,38,1,- +DA:585,10 +DA:587,0 +DA:590,10 +DA:593,48 +DA:595,48 +BRDA:595,39,0,46 +DA:596,46 +DA:599,14 +DA:602,14 +DA:607,48 +BRDA:607,40,0,34 +DA:608,34 +BRDA:608,41,0,34 +BRDA:608,41,1,- +DA:609,34 +DA:611,0 DA:615,48 -DA:616,144 -DA:620,48 +DA:616,48 +DA:618,48 +DA:619,48 DA:622,48 DA:623,48 DA:624,48 -BRDA:624,42,0,48 -BRDA:624,42,1,- DA:625,48 -DA:626,48 -DA:629,0 -DA:630,0 +DA:626,144 +DA:630,48 +DA:632,48 +DA:633,48 +DA:634,48 +BRDA:634,42,0,48 +BRDA:634,42,1,- DA:635,48 DA:636,48 -DA:637,48 -DA:638,48 -DA:639,48 -DA:640,48 -DA:643,48 -DA:644,48 +DA:639,0 +DA:640,0 +DA:645,48 +DA:646,48 +DA:647,48 +DA:648,48 +DA:649,48 DA:650,48 -DA:656,48 -DA:657,112 +DA:653,48 +DA:654,48 +DA:660,48 DA:666,48 -DA:669,48 -DA:670,48 -DA:671,48 -DA:672,144 -BRDA:672,43,0,32 -BRDA:672,43,1,112 -DA:674,32 -DA:676,112 -DA:684,458 -FN:684,Doppler._getEpochEndWithOffset +DA:667,112 +DA:676,48 +DA:679,48 +DA:680,48 +DA:681,48 +DA:682,144 +BRDA:682,43,0,32 +BRDA:682,43,1,112 +DA:684,32 +DA:686,112 +DA:689,48 +DA:695,458 +FN:695,Doppler._getEpochEndWithOffset FNDA:458,Doppler._getEpochEndWithOffset -DA:687,458 -DA:688,458 -BRDA:688,44,0,26 -DA:689,26 -DA:691,0 -DA:695,776 -FN:695,Doppler._getCurrentEpoch +DA:698,458 +DA:699,458 +BRDA:699,44,0,26 +DA:700,26 +DA:702,0 +DA:706,776 +FN:706,Doppler._getCurrentEpoch FNDA:776,Doppler._getCurrentEpoch -DA:696,776 -DA:697,479 -DA:702,627 -FN:702,Doppler._getNormalizedTimeElapsed +DA:707,776 +DA:708,479 +DA:713,627 +FN:713,Doppler._getNormalizedTimeElapsed FNDA:627,Doppler._getNormalizedTimeElapsed -DA:705,627 -DA:712,165 -FN:712,Doppler._getExpectedAmountSoldWithEpochOffset +DA:716,627 +DA:723,165 +FN:723,Doppler._getExpectedAmountSoldWithEpochOffset FNDA:165,Doppler._getExpectedAmountSoldWithEpochOffset -DA:715,165 -DA:726,66 -FN:726,Doppler._getMaxTickDeltaPerEpoch +DA:726,165 +DA:737,66 +FN:737,Doppler._getMaxTickDeltaPerEpoch FNDA:66,Doppler._getMaxTickDeltaPerEpoch -DA:727,66 -DA:728,66 -DA:730,66 -DA:731,66 -BRDA:731,46,0,66 -BRDA:731,46,1,- -DA:732,66 -DA:734,0 -DA:738,5 -DA:745,1102 -FN:745,Doppler._alignComputedTickWithTickSpacing +DA:738,66 +DA:739,66 +DA:741,66 +DA:742,66 +BRDA:742,46,0,66 +BRDA:742,46,1,- +DA:743,66 +DA:745,0 +DA:749,5 +DA:756,1102 +FN:756,Doppler._alignComputedTickWithTickSpacing FNDA:1102,Doppler._alignComputedTickWithTickSpacing -DA:746,1092 -BRDA:746,47,0,1092 -BRDA:746,47,1,10 -DA:748,1092 -BRDA:748,48,0,249 -BRDA:748,48,1,843 -DA:750,249 -DA:753,843 -DA:757,10 -BRDA:757,49,0,- -BRDA:757,49,1,10 -DA:759,0 -DA:762,10 -DA:772,38 -FN:772,Doppler._computeRequiredProceeds +DA:757,1092 +BRDA:757,47,0,1092 +BRDA:757,47,1,10 +DA:759,1092 +BRDA:759,48,0,246 +BRDA:759,48,1,846 +DA:761,246 +DA:764,846 +DA:768,10 +BRDA:768,49,0,- +BRDA:768,49,1,10 +DA:770,0 +DA:773,10 +DA:783,38 +FN:783,Doppler._computeRequiredProceeds FNDA:38,Doppler._computeRequiredProceeds -DA:777,38 -DA:778,38 -BRDA:778,50,0,38 -BRDA:778,50,1,- -DA:779,38 -DA:780,38 -DA:782,0 -DA:783,0 -DA:793,379 -FN:793,Doppler._getTicksBasedOnState +DA:788,38 +DA:789,38 +BRDA:789,50,0,38 +BRDA:789,50,1,- +DA:790,38 +DA:791,38 +DA:793,0 +DA:794,0 +DA:804,379 +FN:804,Doppler._getTicksBasedOnState FNDA:379,Doppler._getTicksBasedOnState -DA:797,379 -DA:798,379 -DA:799,379 -DA:802,377 -BRDA:802,51,0,377 -BRDA:802,51,1,2 -DA:803,377 -DA:805,2 -DA:820,48 -FN:820,Doppler._computeLowerSlugData +DA:808,379 +DA:809,379 +DA:810,379 +DA:813,377 +BRDA:813,51,0,377 +BRDA:813,51,1,2 +DA:814,377 +DA:816,2 +DA:831,48 +FN:831,Doppler._computeLowerSlugData FNDA:48,Doppler._computeLowerSlugData -DA:830,48 -BRDA:830,52,0,8 -BRDA:830,52,1,40 -DA:831,8 -DA:833,40 -DA:834,40 -DA:835,40 -DA:845,48 -BRDA:845,53,0,10 -DA:846,10 -DA:860,108 -FN:860,Doppler._computeUpperSlugData +DA:841,48 +BRDA:841,52,0,8 +BRDA:841,52,1,40 +DA:842,8 +DA:844,40 +DA:845,40 +DA:846,40 +DA:856,48 +BRDA:856,53,0,10 +DA:857,10 +DA:871,108 +FN:871,Doppler._computeUpperSlugData FNDA:108,Doppler._computeUpperSlugData -DA:867,108 -DA:869,108 -DA:872,108 -BRDA:872,54,0,104 -BRDA:872,54,1,2 -DA:873,104 -DA:874,104 -DA:875,104 -DA:876,104 -DA:880,4 -DA:881,4 -DA:885,108 -BRDA:885,55,0,104 -BRDA:885,55,1,4 +DA:878,108 +DA:880,108 +DA:883,108 +BRDA:883,54,0,104 +BRDA:883,54,1,2 +DA:884,104 +DA:885,104 DA:886,104 -DA:893,4 +DA:887,104 +DA:891,4 +DA:892,4 DA:896,108 +BRDA:896,55,0,104 +BRDA:896,55,1,4 +DA:897,104 +DA:904,4 DA:907,108 -FN:907,Doppler._computePriceDiscoverySlugsData +DA:918,108 +FN:918,Doppler._computePriceDiscoverySlugsData FNDA:108,Doppler._computePriceDiscoverySlugsData -DA:914,108 -DA:916,108 -DA:919,108 -BRDA:919,56,0,6 -DA:920,6 -DA:923,102 -DA:924,102 -BRDA:924,57,0,102 -BRDA:924,57,1,- -DA:925,102 -DA:927,0 -DA:930,102 -DA:931,102 -DA:932,116 -BRDA:932,58,0,102 -DA:933,102 -DA:935,14 -DA:938,102 -DA:939,100 -BRDA:939,59,0,100 -BRDA:939,59,1,- -DA:940,100 -DA:942,2 -DA:945,102 -DA:946,102 -DA:947,102 -DA:948,102 -DA:950,102 -DA:951,102 -DA:952,292 -DA:953,292 -DA:954,292 -DA:956,292 -DA:966,102 -DA:973,10 -FN:973,Doppler._computeTargetPriceX96 +DA:925,108 +DA:927,108 +DA:930,108 +BRDA:930,56,0,6 +DA:931,6 +DA:934,102 +DA:935,102 +BRDA:935,57,0,102 +BRDA:935,57,1,- +DA:936,102 +DA:938,0 +DA:941,102 +DA:942,102 +DA:943,116 +BRDA:943,58,0,102 +DA:944,102 +DA:946,14 +DA:949,102 +DA:950,100 +BRDA:950,59,0,100 +BRDA:950,59,1,- +DA:951,100 +DA:953,2 +DA:956,102 +DA:957,102 +DA:958,102 +DA:959,102 +DA:961,102 +DA:962,102 +DA:963,292 +DA:964,292 +DA:965,292 +DA:967,292 +DA:977,102 +DA:984,10 +FN:984,Doppler._computeTargetPriceX96 FNDA:10,Doppler._computeTargetPriceX96 -DA:974,10 -DA:982,446 -FN:982,Doppler._computeLiquidity +DA:985,10 +DA:993,446 +FN:993,Doppler._computeLiquidity FNDA:446,Doppler._computeLiquidity -DA:989,446 -DA:991,388 -BRDA:991,60,0,388 -BRDA:991,60,1,58 -DA:992,388 -DA:994,58 -DA:1002,50 -FN:1002,Doppler._clearPositions +DA:1000,446 +DA:1002,388 +BRDA:1002,60,0,388 +BRDA:1002,60,1,58 +DA:1003,388 +DA:1005,58 +DA:1013,50 +FN:1013,Doppler._clearPositions FNDA:50,Doppler._clearPositions -DA:1006,50 -DA:1007,250 -BRDA:1007,61,0,202 -DA:1008,202 -DA:1018,202 +DA:1017,50 +DA:1018,250 +BRDA:1018,61,0,202 DA:1019,202 -DA:1029,110 -FN:1029,Doppler._update +DA:1029,202 +DA:1030,202 +DA:1040,110 +FN:1040,Doppler._update FNDA:110,Doppler._update -DA:1035,110 -BRDA:1035,62,0,50 -DA:1037,50 -DA:1048,110 -DA:1049,542 -BRDA:1049,63,0,436 -DA:1051,436 -DA:1064,110 -DA:1065,110 -DA:1067,110 -BRDA:1067,64,0,4 -DA:1068,4 -DA:1071,110 -BRDA:1071,65,0,40 -DA:1072,40 +DA:1046,110 +BRDA:1046,62,0,50 +DA:1048,50 +DA:1059,110 +DA:1060,542 +BRDA:1060,63,0,436 +DA:1062,436 DA:1075,110 -BRDA:1075,66,0,104 -DA:1076,104 -DA:1077,104 -DA:1080,110 -BRDA:1080,67,0,2 -DA:1081,2 -DA:1082,2 -DA:1085,110 -DA:1103,62 -FN:1103,Doppler._unlockCallback +DA:1076,110 +DA:1078,110 +BRDA:1078,64,0,4 +DA:1079,4 +DA:1082,110 +BRDA:1082,65,0,40 +DA:1083,40 +DA:1086,110 +BRDA:1086,66,0,104 +DA:1087,104 +DA:1088,104 +DA:1091,110 +BRDA:1091,67,0,2 +DA:1092,2 +DA:1093,2 +DA:1096,110 +DA:1114,62 +FN:1114,Doppler._unlockCallback FNDA:62,Doppler._unlockCallback -DA:1106,62 -DA:1107,62 -DA:1110,2 -BRDA:1110,68,0,2 -DA:1111,2 -DA:1112,2 -DA:1114,2 -DA:1115,10 -DA:1117,10 -BRDA:1117,69,0,8 -DA:1118,8 +DA:1117,62 +DA:1118,62 +DA:1121,2 +BRDA:1121,68,0,2 +DA:1122,2 +DA:1123,2 +DA:1125,2 +DA:1126,10 +DA:1128,10 +BRDA:1128,69,0,8 DA:1129,8 -DA:1130,8 -DA:1134,2 -DA:1135,2 -DA:1137,2 -BRDA:1137,70,0,2 -DA:1138,2 -DA:1141,2 -BRDA:1141,71,0,2 -DA:1142,2 +DA:1140,8 +DA:1141,8 DA:1145,2 -DA:1147,2 -DA:1150,60 -DA:1152,60 -DA:1153,60 -DA:1154,60 -DA:1157,60 -DA:1158,60 -DA:1159,60 -DA:1160,60 -DA:1162,60 +DA:1146,2 +DA:1148,2 +BRDA:1148,70,0,2 +DA:1149,2 +DA:1152,2 +BRDA:1152,71,0,2 +DA:1153,2 +DA:1156,2 +DA:1158,2 +DA:1161,60 +DA:1163,60 DA:1164,60 +DA:1165,60 +DA:1168,60 +DA:1169,60 DA:1170,60 -DA:1176,60 -DA:1177,180 -DA:1185,60 +DA:1171,60 +DA:1173,60 +DA:1175,60 +DA:1181,60 DA:1187,60 -DA:1188,60 -DA:1189,60 -DA:1190,180 -DA:1193,60 -DA:1201,10 -FN:1201,Doppler._computeLowerSlugInsufficientProceeds +DA:1188,180 +DA:1196,60 +DA:1198,60 +DA:1199,60 +DA:1200,60 +DA:1201,180 +DA:1204,60 +DA:1212,10 +FN:1212,Doppler._computeLowerSlugInsufficientProceeds FNDA:10,Doppler._computeLowerSlugInsufficientProceeds -DA:1206,10 -DA:1207,10 -BRDA:1207,72,0,10 -BRDA:1207,72,1,- -DA:1209,10 -DA:1212,0 -DA:1215,10 +DA:1217,10 +DA:1218,10 +BRDA:1218,72,0,10 +BRDA:1218,72,1,- DA:1220,10 -DA:1222,10 -DA:1231,60 -FN:1231,Doppler.getHookPermissions +DA:1223,0 +DA:1226,10 +DA:1231,10 +DA:1233,10 +DA:1242,60 +FN:1242,Doppler.getHookPermissions FNDA:60,Doppler.getHookPermissions -DA:1232,60 -DA:1255,4 -FN:1255,Doppler.migrate +DA:1243,60 +DA:1266,4 +FN:1266,Doppler.migrate FNDA:4,Doppler.migrate -DA:1269,4 -BRDA:1269,73,0,1 -DA:1271,3 -BRDA:1271,74,0,1 -DA:1272,1 -DA:1275,2 -DA:1279,2 -DA:1282,2 -DA:1283,2 -DA:1285,2 +DA:1280,4 +BRDA:1280,73,0,1 +DA:1282,3 +BRDA:1282,74,0,1 +DA:1283,1 DA:1286,2 -DA:1287,2 DA:1290,2 -DA:1291,2 -DA:1292,2 DA:1293,2 +DA:1294,2 +DA:1296,2 +DA:1297,2 +DA:1298,2 +DA:1301,2 +DA:1302,2 +DA:1303,2 +DA:1304,2 FNF:28 FNH:27 -LF:397 -LH:354 +LF:401 +LH:357 BRF:104 BRH:67 end_of_record @@ -892,84 +896,84 @@ BRH:0 end_of_record TN: SF:src/GovernanceFactory.sol -DA:15,14 -FN:15,GovernanceFactory.constructor -FNDA:14,GovernanceFactory.constructor -DA:18,14 -DA:19,14 -DA:22,4 -FN:22,GovernanceFactory.create -FNDA:4,GovernanceFactory.create +DA:16,19 +FN:16,GovernanceFactory.constructor +FNDA:19,GovernanceFactory.constructor +DA:19,19 +DA:20,19 DA:23,4 -BRDA:23,0,0,- -DA:24,0 -DA:27,4 +FN:23,GovernanceFactory.create +FNDA:4,GovernanceFactory.create +DA:24,4 +BRDA:24,0,0,- +BRDA:24,0,1,- +DA:26,4 +DA:28,4 DA:29,4 -DA:30,4 +DA:31,4 DA:32,4 DA:33,4 -DA:34,4 -DA:36,4 -DA:38,4 -DA:43,4 -FN:43,TimelockFactory.create +DA:35,4 +DA:37,4 +DA:42,4 +FN:42,TimelockFactory.create FNDA:4,TimelockFactory.create -DA:44,4 +DA:43,4 FNF:3 FNH:3 -LF:16 +LF:15 LH:15 -BRF:1 +BRF:2 BRH:0 end_of_record TN: SF:src/TokenFactory.sol -DA:15,16 +DA:15,22 FN:15,TokenFactory.constructor -FNDA:16,TokenFactory.constructor -DA:18,16 -DA:29,5 +FNDA:22,TokenFactory.constructor +DA:18,22 +DA:29,6 FN:29,TokenFactory.create -FNDA:5,TokenFactory.create -DA:36,5 +FNDA:6,TokenFactory.create +DA:36,6 BRDA:36,0,0,- -DA:37,0 -DA:40,5 +BRDA:36,0,1,- +DA:38,6 +DA:45,6 DA:47,5 -DA:49,5 FNF:2 FNH:2 -LF:8 +LF:7 LH:7 -BRF:1 +BRF:2 BRH:0 end_of_record TN: SF:src/UniswapV2Locker.sol -DA:59,25 +DA:59,32 FN:59,UniswapV2Locker.constructor -FNDA:25,UniswapV2Locker.constructor -DA:60,25 -DA:61,25 -DA:62,25 -DA:69,7 +FNDA:32,UniswapV2Locker.constructor +DA:60,32 +DA:61,32 +DA:62,32 +DA:69,9 FN:69,UniswapV2Locker.receiveAndLock -FNDA:7,UniswapV2Locker.receiveAndLock -DA:72,7 +FNDA:9,UniswapV2Locker.receiveAndLock +DA:72,9 BRDA:72,0,0,- BRDA:72,0,1,- -DA:73,7 +DA:73,8 BRDA:73,1,0,- BRDA:73,1,1,- -DA:75,6 -DA:76,6 +DA:75,7 +DA:76,7 BRDA:76,2,0,- BRDA:76,2,1,- -DA:78,5 -DA:79,5 -DA:82,5 -DA:83,5 -DA:85,5 +DA:78,6 +DA:79,6 +DA:82,6 +DA:83,6 +DA:85,6 DA:93,2 FN:93,UniswapV2Locker.claimFeesAndExit FNDA:2,UniswapV2Locker.claimFeesAndExit @@ -982,28 +986,28 @@ DA:103,1 DA:105,1 DA:106,1 DA:108,1 +DA:110,1 DA:111,1 -DA:112,1 +DA:113,1 DA:114,1 -DA:115,1 +DA:116,1 DA:117,1 -DA:118,1 +DA:119,1 DA:120,1 +BRDA:120,4,0,1 DA:121,1 -BRDA:121,4,0,1 -DA:122,1 +DA:123,1 +BRDA:123,5,0,1 DA:124,1 -BRDA:124,5,0,1 -DA:125,1 +DA:127,1 DA:128,1 -DA:129,1 +DA:130,1 DA:131,1 +BRDA:131,6,0,1 DA:132,1 -BRDA:132,6,0,1 -DA:133,1 +DA:134,1 +BRDA:134,7,0,1 DA:135,1 -BRDA:135,7,0,1 -DA:136,1 FNF:3 FNH:3 LF:40 @@ -1013,92 +1017,95 @@ BRH:4 end_of_record TN: SF:src/UniswapV2Migrator.sol -DA:38,19 -FN:38,UniswapV2Migrator.constructor -FNDA:19,UniswapV2Migrator.constructor -DA:39,19 -DA:40,19 -DA:41,19 -DA:42,19 -DA:45,8 -FN:45,UniswapV2Migrator.initialize -FNDA:8,UniswapV2Migrator.initialize -DA:46,8 -DA:48,8 -BRDA:48,0,0,3 -DA:49,8 -BRDA:49,1,0,2 -DA:51,8 -DA:53,8 -BRDA:53,2,0,7 -DA:54,7 -DA:58,8 -DA:59,8 -DA:61,0 -DA:70,3 -FN:70,UniswapV2Migrator.migrate -FNDA:3,UniswapV2Migrator.migrate -DA:76,3 -BRDA:76,3,0,1 -DA:77,1 -DA:80,2 -DA:81,2 -DA:83,2 -BRDA:83,4,0,- -BRDA:83,4,1,- -DA:84,0 -DA:85,0 -DA:86,0 -DA:88,2 -DA:91,0 -DA:93,2 -DA:94,2 -DA:96,2 -BRDA:96,5,0,- -BRDA:96,5,1,1 -DA:97,0 +DA:39,25 +FN:39,UniswapV2Migrator.constructor +FNDA:25,UniswapV2Migrator.constructor +DA:40,25 +DA:41,25 +DA:42,25 +DA:43,25 +DA:46,9 +FN:46,UniswapV2Migrator.initialize +FNDA:9,UniswapV2Migrator.initialize +DA:47,9 +BRDA:47,0,0,- +BRDA:47,0,1,- +DA:49,9 +DA:51,9 +BRDA:51,1,0,4 +DA:52,9 +BRDA:52,2,0,3 +DA:54,9 +DA:56,9 +BRDA:56,3,0,8 +DA:57,8 +DA:61,9 +DA:62,9 +DA:64,0 +DA:73,4 +FN:73,UniswapV2Migrator.migrate +FNDA:4,UniswapV2Migrator.migrate +DA:79,4 +BRDA:79,4,0,- +BRDA:79,4,1,- +DA:81,3 +DA:82,3 +DA:84,3 +BRDA:84,5,0,1 +BRDA:84,5,1,- +DA:85,1 +DA:86,1 +DA:87,1 +DA:89,2 +DA:92,1 +DA:94,3 +DA:95,3 +DA:97,3 +BRDA:97,6,0,- +BRDA:97,6,1,1 DA:98,0 -DA:99,2 -BRDA:99,6,0,1 -DA:100,1 +DA:99,0 +DA:100,3 +BRDA:100,7,0,1 DA:101,1 -DA:104,2 -BRDA:104,7,0,- -DA:105,0 -DA:106,0 -DA:110,2 -DA:112,2 -DA:113,2 -DA:115,2 -DA:116,2 -DA:117,2 -DA:118,2 -DA:119,2 -DA:121,2 -BRDA:121,8,0,1 -DA:122,1 -DA:125,2 -DA:126,2 -BRDA:126,9,0,- -DA:127,0 -DA:130,2 -DA:131,2 -BRDA:131,10,0,1 -DA:132,1 +DA:102,1 +DA:105,3 +BRDA:105,8,0,1 +DA:106,1 +DA:107,1 +DA:111,3 +DA:113,3 +DA:114,3 +DA:116,3 +DA:117,3 +DA:118,3 +DA:119,3 +DA:120,3 +DA:122,3 +BRDA:122,9,0,1 +DA:123,1 +DA:126,3 +DA:127,3 +BRDA:127,10,0,- +DA:128,0 +DA:131,3 +DA:132,3 +BRDA:132,11,0,1 +DA:133,1 FNF:3 FNH:3 LF:53 -LH:43 -BRF:13 -BRH:8 +LH:49 +BRF:16 +BRH:9 end_of_record TN: SF:src/UniswapV3Initializer.sol -DA:93,21 +DA:93,26 FN:93,UniswapV3Initializer.constructor -FNDA:21,UniswapV3Initializer.constructor -DA:94,21 -DA:95,21 +FNDA:26,UniswapV3Initializer.constructor +DA:94,26 +DA:95,26 DA:99,10 FN:99,UniswapV3Initializer.initialize FNDA:10,UniswapV3Initializer.initialize @@ -1264,59 +1271,51 @@ BRH:10 end_of_record TN: SF:src/UniswapV4Initializer.sol -DA:25,12 -FN:25,DopplerDeployer.constructor -FNDA:12,DopplerDeployer.constructor -DA:26,12 -DA:27,12 -DA:30,2 -FN:30,DopplerDeployer.deploy +DA:19,17 +FN:19,DopplerDeployer.constructor +FNDA:17,DopplerDeployer.constructor +DA:22,17 +DA:25,2 +FN:25,DopplerDeployer.deploy FNDA:2,DopplerDeployer.deploy -DA:31,2 -DA:43,2 -DA:45,2 -DA:61,0 -DA:88,12 -FN:88,UniswapV4Initializer.constructor -FNDA:12,UniswapV4Initializer.constructor -DA:89,12 -DA:90,12 -DA:91,12 -DA:95,2 -FN:95,UniswapV4Initializer.initialize +DA:26,2 +DA:38,2 +DA:40,2 +DA:56,0 +DA:83,17 +FN:83,UniswapV4Initializer.constructor +FNDA:17,UniswapV4Initializer.constructor +DA:84,17 +DA:85,17 +DA:86,17 +DA:90,2 +FN:90,UniswapV4Initializer.initialize FNDA:2,UniswapV4Initializer.initialize +DA:97,2 +BRDA:97,0,0,- +DA:98,0 +DA:101,2 DA:102,2 -BRDA:102,0,0,- -DA:103,0 +DA:104,2 DA:106,2 -DA:107,2 -DA:109,2 -DA:111,2 -BRDA:111,1,0,- -DA:112,0 -DA:115,2 -DA:123,2 -BRDA:123,2,0,- -DA:124,0 -DA:127,2 -BRDA:127,3,0,- -DA:128,0 -DA:131,2 -DA:132,2 -DA:134,2 -DA:136,2 -DA:140,0 -FN:140,UniswapV4Initializer.exitLiquidity +BRDA:106,1,0,- +DA:107,0 +DA:110,2 +DA:118,2 +DA:120,2 +DA:122,2 +DA:126,0 +FN:126,UniswapV4Initializer.exitLiquidity FNDA:0,UniswapV4Initializer.exitLiquidity -DA:154,0 -BRDA:154,4,0,- -DA:155,0 -DA:158,0 +DA:140,0 +BRDA:140,2,0,- +DA:141,0 +DA:144,0 FNF:5 FNH:4 -LF:33 -LH:24 -BRF:5 +LF:27 +LH:20 +BRF:3 BRH:0 end_of_record TN: @@ -1364,129 +1363,129 @@ BRH:0 end_of_record TN: SF:test/invariant/DopplerHandler.sol -DA:41,0 -FN:41,DopplerHandler.createActor +DA:39,0 +FN:39,DopplerHandler.createActor FNDA:0,DopplerHandler.createActor +DA:40,0 +DA:41,0 DA:42,0 -DA:43,0 DA:44,0 -DA:46,0 -DA:49,0 -FN:49,DopplerHandler.useActor +DA:47,0 +FN:47,DopplerHandler.useActor FNDA:0,DopplerHandler.useActor -DA:52,0 +DA:50,0 +DA:51,0 DA:53,0 -DA:55,0 -DA:58,0 -FN:58,DopplerHandler.countCall +DA:56,0 +FN:56,DopplerHandler.countCall FNDA:0,DopplerHandler.countCall -DA:61,0 -DA:62,0 -DA:66,7 -FN:66,DopplerHandler.constructor +DA:59,0 +DA:60,0 +DA:64,7 +FN:64,DopplerHandler.constructor FNDA:7,DopplerHandler.constructor +DA:71,7 +DA:72,7 DA:73,7 DA:74,7 DA:75,7 -DA:76,7 DA:77,7 +BRDA:77,0,0,7 +BRDA:77,0,1,- +DA:78,7 DA:79,7 -BRDA:79,0,0,7 -BRDA:79,0,1,- -DA:80,7 -DA:81,7 -DA:83,0 -DA:86,7 +DA:81,0 +DA:84,7 +DA:85,7 DA:87,7 +BRDA:87,1,0,7 +BRDA:87,1,1,- +DA:88,7 DA:89,7 -BRDA:89,1,0,7 -BRDA:89,1,1,- -DA:90,7 -DA:91,7 -DA:93,0 -DA:94,0 -DA:99,0 -FN:99,DopplerHandler.buyExactAmountIn +DA:91,0 +DA:92,0 +DA:97,0 +FN:97,DopplerHandler.buyExactAmountIn FNDA:0,DopplerHandler.buyExactAmountIn +DA:100,0 DA:102,0 -DA:104,0 -BRDA:104,2,0,- -BRDA:104,2,1,- +BRDA:102,2,0,- +BRDA:102,2,1,- +DA:103,0 DA:105,0 -DA:107,0 -DA:108,0 +DA:106,0 +DA:109,0 +DA:110,0 DA:111,0 DA:112,0 -DA:113,0 DA:114,0 +BRDA:114,3,0,- +BRDA:114,3,1,- +DA:115,0 DA:116,0 -BRDA:116,3,0,- -BRDA:116,3,1,- -DA:117,0 DA:118,0 -DA:120,0 -DA:121,0 -DA:125,0 -FN:125,DopplerHandler.buyExactAmountOut +DA:119,0 +DA:123,0 +FN:123,DopplerHandler.buyExactAmountOut FNDA:0,DopplerHandler.buyExactAmountOut -DA:128,0 +DA:126,0 +DA:127,0 DA:129,0 -DA:131,0 -BRDA:131,4,0,- -BRDA:131,4,1,- +BRDA:129,4,0,- +BRDA:129,4,1,- +DA:130,0 DA:132,0 -DA:134,0 -DA:135,0 +DA:133,0 +DA:136,0 +DA:137,0 DA:138,0 DA:139,0 -DA:140,0 DA:141,0 +BRDA:141,5,0,- +BRDA:141,5,1,- +DA:142,0 DA:143,0 -BRDA:143,5,0,- -BRDA:143,5,1,- -DA:144,0 DA:145,0 -DA:147,0 -DA:148,0 -DA:152,0 -FN:152,DopplerHandler.sellExactIn +DA:146,0 +DA:150,0 +FN:150,DopplerHandler.sellExactIn FNDA:0,DopplerHandler.sellExactIn +DA:154,0 DA:156,0 +DA:157,0 DA:158,0 -DA:159,0 DA:160,0 +DA:161,0 DA:162,0 -DA:163,0 DA:164,0 +BRDA:164,7,0,- +BRDA:164,7,1,- +DA:165,0 DA:166,0 -BRDA:166,7,0,- -BRDA:166,7,1,- -DA:167,0 DA:168,0 -DA:170,0 -DA:171,0 -DA:175,0 -FN:175,DopplerHandler.sellExactOut +DA:169,0 +DA:173,0 +FN:173,DopplerHandler.sellExactOut FNDA:0,DopplerHandler.sellExactOut -DA:179,0 -DA:182,0 +DA:177,0 +DA:180,0 +DA:183,0 DA:185,0 -DA:187,0 +DA:186,0 DA:188,0 +DA:189,0 DA:190,0 -DA:191,0 DA:192,0 +BRDA:192,9,0,- +BRDA:192,9,1,- +DA:193,0 DA:194,0 -BRDA:194,9,0,- -BRDA:194,9,1,- -DA:195,0 DA:196,0 -DA:198,0 -DA:199,0 -DA:203,0 -FN:203,DopplerHandler.goNextEpoch +DA:197,0 +DA:201,0 +FN:201,DopplerHandler.goNextEpoch FNDA:0,DopplerHandler.goNextEpoch -DA:204,0 +DA:202,0 FNF:9 FNH:1 LF:89 @@ -1496,194 +1495,194 @@ BRH:2 end_of_record TN: SF:test/shared/BaseTest.sol -DA:124,58 -FN:124,BaseTest._deploy +DA:122,58 +FN:122,BaseTest._deploy FNDA:58,BaseTest._deploy -DA:125,0 -DA:126,0 -DA:131,0 -FN:131,BaseTest._deploy +DA:123,0 +DA:124,0 +DA:129,0 +FN:129,BaseTest._deploy FNDA:0,BaseTest._deploy +DA:130,0 +DA:131,0 DA:132,0 -DA:133,0 -DA:134,0 -DA:139,0 -FN:139,BaseTest._deploy +DA:137,0 +FN:137,BaseTest._deploy FNDA:0,BaseTest._deploy -DA:142,0 -DA:143,0 -DA:148,0 -FN:148,BaseTest._deploy +DA:140,0 +DA:141,0 +DA:146,0 +FN:146,BaseTest._deploy FNDA:0,BaseTest._deploy +DA:147,0 +DA:148,0 DA:149,0 -DA:150,0 -DA:151,0 -DA:155,72 -FN:155,BaseTest._deployTokens +DA:153,72 +FN:153,BaseTest._deployTokens FNDA:72,BaseTest._deployTokens -DA:156,72 -DA:157,72 +DA:154,72 +DA:155,72 +DA:157,0 +BRDA:157,0,0,- +BRDA:157,0,1,- +DA:158,0 DA:159,0 -BRDA:159,0,0,- -BRDA:159,0,1,- DA:160,0 DA:161,0 DA:162,0 DA:163,0 -DA:164,0 DA:165,0 -DA:167,0 -DA:170,72 -DA:173,72 -DA:174,72 -DA:179,58 -FN:179,BaseTest._deployDoppler +DA:168,72 +DA:171,72 +DA:172,72 +DA:177,58 +FN:177,BaseTest._deployDoppler FNDA:58,BaseTest._deployDoppler -DA:180,58 -DA:184,58 -FN:184,BaseTest._deployDoppler +DA:178,58 +DA:182,58 +FN:182,BaseTest._deployDoppler FNDA:58,BaseTest._deployDoppler +DA:185,58 +DA:186,58 DA:187,58 -DA:188,58 DA:189,58 -DA:191,58 -DA:195,58 -DA:198,58 +DA:193,58 +DA:196,58 +DA:200,58 DA:202,58 -DA:204,58 -DA:212,58 +DA:210,58 +DA:231,58 DA:233,58 DA:235,58 DA:237,58 DA:239,58 -DA:241,58 -BRDA:241,1,0,- +BRDA:239,1,0,- +DA:240,0 +DA:241,0 DA:242,0 -DA:243,0 -DA:244,0 -DA:248,58 -FN:248,BaseTest.setUp +DA:246,58 +FN:246,BaseTest.setUp FNDA:58,BaseTest.setUp -DA:249,58 -DA:250,0 -DA:253,58 -DA:254,58 +DA:247,58 +DA:248,0 +DA:251,58 +DA:252,58 +DA:256,58 DA:258,58 +BRDA:258,2,0,58 DA:260,58 -BRDA:260,2,0,58 -DA:262,58 +DA:261,58 DA:263,58 -DA:265,58 +DA:264,58 DA:266,58 -DA:268,58 +DA:267,58 DA:269,58 -DA:271,58 -DA:272,58 -DA:275,41 -FN:275,BaseTest.computeBuyExactOut +DA:270,58 +DA:273,41 +FN:273,BaseTest.computeBuyExactOut FNDA:41,BaseTest.computeBuyExactOut -DA:278,41 -DA:287,41 -DA:290,0 -FN:290,BaseTest.computeSellExactOut +DA:276,41 +DA:285,41 +DA:288,0 +FN:288,BaseTest.computeSellExactOut FNDA:0,BaseTest.computeSellExactOut -DA:293,0 -DA:302,0 -DA:305,1 -FN:305,BaseTest.buyExactIn +DA:291,0 +DA:300,0 +DA:303,1 +FN:303,BaseTest.buyExactIn FNDA:1,BaseTest.buyExactIn -DA:308,1 -DA:311,1 -FN:311,BaseTest.buyExactOut +DA:306,1 +DA:309,1 +FN:309,BaseTest.buyExactOut FNDA:1,BaseTest.buyExactOut -DA:314,1 -DA:317,0 -FN:317,BaseTest.sellExactIn +DA:312,1 +DA:315,0 +FN:315,BaseTest.sellExactIn FNDA:0,BaseTest.sellExactIn -DA:320,0 -DA:323,0 -FN:323,BaseTest.sellExactOut +DA:318,0 +DA:321,0 +FN:321,BaseTest.sellExactOut FNDA:0,BaseTest.sellExactOut -DA:326,0 -DA:334,47 -FN:334,BaseTest.buy +DA:324,0 +DA:332,47 +FN:332,BaseTest.buy FNDA:47,BaseTest.buy -DA:338,47 -DA:340,0 -BRDA:340,3,0,- -BRDA:340,3,1,- -DA:341,0 -DA:343,47 -DA:344,47 -DA:347,0 -DA:354,47 +DA:336,47 +DA:338,0 +BRDA:338,3,0,- +BRDA:338,3,1,- +DA:339,0 +DA:341,47 +DA:342,47 +DA:345,0 +DA:352,47 +DA:353,47 DA:355,47 -DA:357,47 -DA:365,9 -FN:365,BaseTest.sell +DA:363,9 +FN:363,BaseTest.sell FNDA:9,BaseTest.sell -DA:369,9 +DA:367,9 +DA:368,9 DA:370,9 -DA:372,9 -DA:379,9 +DA:377,9 +DA:378,9 DA:380,9 -DA:382,9 -DA:385,2 -FN:385,BaseTest.sellExpectRevert +DA:383,2 +FN:383,BaseTest.sellExpectRevert FNDA:2,BaseTest.sellExpectRevert -DA:387,2 -BRDA:387,4,0,- -DA:388,0 +DA:385,2 +BRDA:385,4,0,- +DA:386,0 +DA:388,2 +DA:389,2 DA:390,2 -DA:391,2 -DA:392,2 -DA:401,2 -DA:409,3 -FN:409,BaseTest.buyExpectRevert +DA:399,2 +DA:407,3 +FN:407,BaseTest.buyExpectRevert FNDA:3,BaseTest.buyExpectRevert -DA:411,3 -BRDA:411,5,0,- -DA:412,0 -DA:414,3 -DA:416,0 -BRDA:416,6,0,- -BRDA:416,6,1,- -DA:417,0 -DA:419,3 -DA:420,3 -DA:423,3 -DA:432,3 -DA:440,1 -FN:440,BaseTest.computeFees +DA:409,3 +BRDA:409,5,0,- +DA:410,0 +DA:412,3 +DA:414,0 +BRDA:414,6,0,- +BRDA:414,6,1,- +DA:415,0 +DA:417,3 +DA:418,3 +DA:421,3 +DA:430,3 +DA:438,1 +FN:438,BaseTest.computeFees FNDA:1,BaseTest.computeFees +DA:439,1 DA:441,1 +DA:442,1 DA:443,1 -DA:444,1 -DA:445,1 -BRDA:445,7,0,- -BRDA:445,7,1,1 +BRDA:443,7,0,- +BRDA:443,7,1,1 +DA:444,0 +DA:445,0 DA:446,0 DA:447,0 -DA:448,0 -DA:449,0 -DA:451,1 -DA:452,1 -DA:455,1 -DA:458,0 -FN:458,BaseTest._debugPositions +DA:449,1 +DA:450,1 +DA:453,1 +DA:456,0 +FN:456,BaseTest._debugPositions FNDA:0,BaseTest._debugPositions +DA:459,0 DA:461,0 -DA:463,0 +DA:462,0 DA:464,0 +DA:465,0 DA:466,0 -DA:467,0 -DA:468,0 +DA:470,0 +DA:471,0 DA:472,0 DA:473,0 DA:474,0 DA:475,0 -DA:476,0 -DA:477,0 FNF:20 FNH:13 LF:136 @@ -1791,84 +1790,84 @@ BRH:0 end_of_record TN: SF:test/shared/CustomRouter2.sol -DA:28,0 -FN:28,CustomRouter2.constructor +DA:27,0 +FN:27,CustomRouter2.constructor FNDA:0,CustomRouter2.constructor +DA:28,0 DA:29,0 -DA:30,0 -DA:35,0 -FN:35,CustomRouter2._getHookData +DA:34,0 +FN:34,CustomRouter2._getHookData FNDA:0,CustomRouter2._getHookData +DA:37,0 DA:38,0 DA:39,0 DA:40,0 -DA:41,0 -DA:44,0 -FN:44,CustomRouter2.computeBuyExactOut +DA:43,0 +FN:43,CustomRouter2.computeBuyExactOut FNDA:0,CustomRouter2.computeBuyExactOut +DA:44,0 DA:45,0 -DA:46,0 -DA:55,0 -DA:58,0 -FN:58,CustomRouter2.computeSellExactOut +DA:54,0 +DA:57,0 +FN:57,CustomRouter2.computeSellExactOut FNDA:0,CustomRouter2.computeSellExactOut +DA:58,0 DA:59,0 -DA:60,0 -DA:69,0 -DA:74,0 -FN:74,CustomRouter2.buyExactIn +DA:68,0 +DA:73,0 +FN:73,CustomRouter2.buyExactIn FNDA:0,CustomRouter2.buyExactIn -DA:75,0 -DA:79,0 -FN:79,CustomRouter2.buyExactOut +DA:74,0 +DA:78,0 +FN:78,CustomRouter2.buyExactOut FNDA:0,CustomRouter2.buyExactOut -DA:80,0 -DA:85,0 -FN:85,CustomRouter2.sellExactIn +DA:79,0 +DA:84,0 +FN:84,CustomRouter2.sellExactIn FNDA:0,CustomRouter2.sellExactIn -DA:86,0 -DA:91,0 -FN:91,CustomRouter2.sellExactOut +DA:85,0 +DA:90,0 +FN:90,CustomRouter2.sellExactOut FNDA:0,CustomRouter2.sellExactOut -DA:92,0 -DA:100,0 -FN:100,CustomRouter2.buy +DA:91,0 +DA:99,0 +FN:99,CustomRouter2.buy FNDA:0,CustomRouter2.buy -DA:101,0 -DA:103,0 +DA:100,0 +DA:102,0 +DA:104,0 +BRDA:104,0,0,- +BRDA:104,0,1,- DA:105,0 -BRDA:105,0,0,- -BRDA:105,0,1,- -DA:106,0 -BRDA:106,1,0,- -BRDA:106,1,1,- +BRDA:105,1,0,- +BRDA:105,1,1,- +DA:107,0 DA:108,0 -DA:109,0 -DA:112,0 +DA:111,0 +DA:118,0 DA:119,0 -DA:120,0 +DA:121,0 DA:122,0 -DA:123,0 -DA:125,0 -DA:127,0 -DA:135,0 -FN:135,CustomRouter2.sell +DA:124,0 +DA:126,0 +DA:134,0 +FN:134,CustomRouter2.sell FNDA:0,CustomRouter2.sell +DA:135,0 DA:136,0 DA:137,0 DA:138,0 -DA:139,0 -DA:141,0 +DA:140,0 +DA:147,0 DA:148,0 -DA:149,0 +DA:150,0 DA:151,0 -DA:152,0 +DA:153,0 +BRDA:153,2,0,- +BRDA:153,2,1,- DA:154,0 -BRDA:154,2,0,- -BRDA:154,2,1,- -DA:155,0 -DA:157,0 -DA:160,0 +DA:156,0 +DA:159,0 FNF:10 FNH:0 LF:52 @@ -1878,126 +1877,126 @@ BRH:0 end_of_record TN: SF:test/shared/DopplerImplementation.sol -DA:17,58 -FN:17,DopplerImplementation.constructor +DA:18,58 +FN:18,DopplerImplementation.constructor FNDA:58,DopplerImplementation.constructor -DA:49,58 -DA:53,0 -FN:53,DopplerImplementation.validateHookAddress +DA:50,58 +DA:54,0 +FN:54,DopplerImplementation.validateHookAddress FNDA:0,DopplerImplementation.validateHookAddress -DA:57,317 -FN:57,DopplerImplementation.getStartingTime -FNDA:317,DopplerImplementation.getStartingTime DA:58,317 -DA:61,270 -FN:61,DopplerImplementation.getEndingTime -FNDA:270,DopplerImplementation.getEndingTime +FN:58,DopplerImplementation.getStartingTime +FNDA:317,DopplerImplementation.getStartingTime +DA:59,317 DA:62,270 -DA:65,37 -FN:65,DopplerImplementation.getEpochLength -FNDA:37,DopplerImplementation.getEpochLength +FN:62,DopplerImplementation.getEndingTime +FNDA:270,DopplerImplementation.getEndingTime +DA:63,270 DA:66,37 -DA:69,263 -FN:69,DopplerImplementation.getIsToken0 -FNDA:263,DopplerImplementation.getIsToken0 -DA:70,263 -DA:73,4 -FN:73,DopplerImplementation.getNumTokensToSell -FNDA:4,DopplerImplementation.getNumTokensToSell +FN:66,DopplerImplementation.getEpochLength +FNDA:37,DopplerImplementation.getEpochLength +DA:67,37 +DA:70,261 +FN:70,DopplerImplementation.getIsToken0 +FNDA:261,DopplerImplementation.getIsToken0 +DA:71,261 DA:74,4 -DA:77,5 -FN:77,DopplerImplementation.getMinimumProceeds -FNDA:5,DopplerImplementation.getMinimumProceeds +FN:74,DopplerImplementation.getNumTokensToSell +FNDA:4,DopplerImplementation.getNumTokensToSell +DA:75,4 DA:78,5 -DA:81,0 -FN:81,DopplerImplementation.getMaximumProceeds -FNDA:0,DopplerImplementation.getMaximumProceeds +FN:78,DopplerImplementation.getMinimumProceeds +FNDA:5,DopplerImplementation.getMinimumProceeds +DA:79,5 DA:82,0 -DA:85,259 -FN:85,DopplerImplementation.getStartingTick -FNDA:259,DopplerImplementation.getStartingTick +FN:82,DopplerImplementation.getMaximumProceeds +FNDA:0,DopplerImplementation.getMaximumProceeds +DA:83,0 DA:86,259 -DA:89,257 -FN:89,DopplerImplementation.getEndingTick -FNDA:257,DopplerImplementation.getEndingTick +FN:86,DopplerImplementation.getStartingTick +FNDA:259,DopplerImplementation.getStartingTick +DA:87,259 DA:90,257 -DA:93,257 -FN:93,DopplerImplementation.getGamma -FNDA:257,DopplerImplementation.getGamma +FN:90,DopplerImplementation.getEndingTick +FNDA:257,DopplerImplementation.getEndingTick +DA:91,257 DA:94,257 -DA:97,2 -FN:97,DopplerImplementation.getNormalizedEpochDelta -FNDA:2,DopplerImplementation.getNormalizedEpochDelta +FN:94,DopplerImplementation.getGamma +FNDA:257,DopplerImplementation.getGamma +DA:95,257 DA:98,2 -DA:101,9 -FN:101,DopplerImplementation.getExpectedAmountSoldWithEpochOffset +FN:98,DopplerImplementation.getNormalizedEpochDelta +FNDA:2,DopplerImplementation.getNormalizedEpochDelta +DA:99,2 +DA:102,9 +FN:102,DopplerImplementation.getExpectedAmountSoldWithEpochOffset FNDA:9,DopplerImplementation.getExpectedAmountSoldWithEpochOffset -DA:104,9 -DA:107,4 -FN:107,DopplerImplementation.getMaxTickDeltaPerEpoch -FNDA:4,DopplerImplementation.getMaxTickDeltaPerEpoch +DA:105,9 DA:108,4 -DA:111,271 -FN:111,DopplerImplementation.getTicksBasedOnState -FNDA:271,DopplerImplementation.getTicksBasedOnState +FN:108,DopplerImplementation.getMaxTickDeltaPerEpoch +FNDA:4,DopplerImplementation.getMaxTickDeltaPerEpoch +DA:109,4 DA:112,271 -DA:115,4 -FN:115,DopplerImplementation.getCurrentEpoch -FNDA:4,DopplerImplementation.getCurrentEpoch +FN:112,DopplerImplementation.getTicksBasedOnState +FNDA:271,DopplerImplementation.getTicksBasedOnState +DA:113,271 DA:116,4 -DA:119,2 -FN:119,DopplerImplementation.getTotalEpochs -FNDA:2,DopplerImplementation.getTotalEpochs +FN:116,DopplerImplementation.getCurrentEpoch +FNDA:4,DopplerImplementation.getCurrentEpoch +DA:117,4 DA:120,2 -DA:123,258 -FN:123,DopplerImplementation.getNormalizedTimeElapsed +FN:120,DopplerImplementation.getTotalEpochs +FNDA:2,DopplerImplementation.getTotalEpochs +DA:121,2 +DA:124,258 +FN:124,DopplerImplementation.getNormalizedTimeElapsed FNDA:258,DopplerImplementation.getNormalizedTimeElapsed -DA:126,258 -DA:129,10 -FN:129,DopplerImplementation.getEpochEndWithOffset +DA:127,258 +DA:130,10 +FN:130,DopplerImplementation.getEpochEndWithOffset FNDA:10,DopplerImplementation.getEpochEndWithOffset -DA:132,10 -DA:135,100 -FN:135,DopplerImplementation.getNumPDSlugs -FNDA:100,DopplerImplementation.getNumPDSlugs +DA:133,10 DA:136,100 -DA:139,257 -FN:139,DopplerImplementation.alignComputedTickWithTickSpacing -FNDA:257,DopplerImplementation.alignComputedTickWithTickSpacing +FN:136,DopplerImplementation.getNumPDSlugs +FNDA:100,DopplerImplementation.getNumPDSlugs +DA:137,100 DA:140,257 -DA:143,0 -FN:143,DopplerImplementation.computeLowerSlugData +FN:140,DopplerImplementation.alignComputedTickWithTickSpacing +FNDA:257,DopplerImplementation.alignComputedTickWithTickSpacing +DA:141,257 +DA:144,0 +FN:144,DopplerImplementation.computeLowerSlugData FNDA:0,DopplerImplementation.computeLowerSlugData -DA:151,0 -DA:154,0 -FN:154,DopplerImplementation.computeUpperSlugData +DA:152,0 +DA:155,0 +FN:155,DopplerImplementation.computeUpperSlugData FNDA:0,DopplerImplementation.computeUpperSlugData -DA:160,0 -DA:163,0 -FN:163,DopplerImplementation.computePriceDiscoverySlugsData +DA:161,0 +DA:164,0 +FN:164,DopplerImplementation.computePriceDiscoverySlugsData FNDA:0,DopplerImplementation.computePriceDiscoverySlugsData -DA:169,0 -DA:172,99 -FN:172,DopplerImplementation.getPositions +DA:170,0 +DA:173,99 +FN:173,DopplerImplementation.getPositions FNDA:99,DopplerImplementation.getPositions -DA:175,99 -DA:178,0 -FN:178,DopplerImplementation.unlock +DA:176,99 +DA:179,0 +FN:179,DopplerImplementation.unlock FNDA:0,DopplerImplementation.unlock -DA:181,0 -DA:184,16 -FN:184,DopplerImplementation.getCurrentTick +DA:182,0 +DA:185,16 +FN:185,DopplerImplementation.getCurrentTick FNDA:16,DopplerImplementation.getCurrentTick -DA:187,16 DA:188,16 -DA:191,0 -FN:191,DopplerImplementation.getRequiredProceeds +DA:189,16 +DA:192,0 +FN:192,DopplerImplementation.getRequiredProceeds FNDA:0,DopplerImplementation.getRequiredProceeds -DA:196,0 -DA:199,1 -FN:199,DopplerImplementation.getFeesAccrued -FNDA:1,DopplerImplementation.getFeesAccrued +DA:197,0 DA:200,1 +FN:200,DopplerImplementation.getFeesAccrued +FNDA:1,DopplerImplementation.getFeesAccrued +DA:201,1 FNF:30 FNH:23 LF:60 @@ -2007,10 +2006,9 @@ BRH:0 end_of_record TN: SF:test/shared/SlugVis.sol -DA:20,2 -FN:20,SlugVis.visualizeSlugs +DA:21,2 +FN:21,SlugVis.visualizeSlugs FNDA:2,SlugVis.visualizeSlugs -DA:26,2 DA:27,2 DA:28,2 DA:29,2 @@ -2018,98 +2016,99 @@ DA:30,2 DA:31,2 DA:32,2 DA:33,2 -DA:36,2 -FN:36,SlugVis.checkSlugsAndCreateNamedSlugArray +DA:34,2 +DA:37,2 +FN:37,SlugVis.checkSlugsAndCreateNamedSlugArray FNDA:2,SlugVis.checkSlugsAndCreateNamedSlugArray -DA:42,2 DA:43,2 DA:44,2 -DA:46,2 -DA:47,6 -BRDA:47,0,0,6 +DA:45,2 +DA:47,2 DA:48,6 -DA:52,2 -DA:54,0 -DA:55,2 -DA:57,0 -BRDA:57,1,0,- +BRDA:48,0,0,6 +DA:49,6 +DA:53,2 +DA:55,0 +DA:56,2 DA:58,0 -DA:61,2 -BRDA:61,2,0,2 +BRDA:58,1,0,- +DA:59,0 DA:62,2 -DA:66,2 -BRDA:66,3,0,2 +BRDA:62,2,0,2 +DA:63,2 DA:67,2 -DA:68,6 -DA:77,2 -DA:80,2 -FN:80,SlugVis.getSlugDataFromPositions +BRDA:67,3,0,2 +DA:68,2 +DA:69,6 +DA:78,2 +DA:81,2 +FN:81,SlugVis.getSlugDataFromPositions FNDA:2,SlugVis.getSlugDataFromPositions -DA:84,2 DA:85,2 DA:86,2 DA:87,2 -DA:88,6 -DA:91,2 -DA:96,2 -DA:101,2 +DA:88,2 +DA:89,6 +DA:92,2 +DA:97,2 DA:102,2 -DA:103,6 -DA:109,2 -DA:112,2 -FN:112,SlugVis._constructJson +DA:103,2 +DA:104,6 +DA:110,2 +DA:113,2 +FN:113,SlugVis._constructJson FNDA:2,SlugVis._constructJson -DA:118,2 -DA:120,2 -DA:121,8 -DA:149,8 -BRDA:149,4,0,6 -DA:150,6 -DA:154,2 +DA:119,2 +DA:121,2 +DA:122,8 +DA:150,8 +BRDA:150,4,0,6 +DA:151,6 DA:155,2 -DA:158,22 -FN:158,SlugVis.uint2str +DA:156,2 +DA:159,22 +FN:159,SlugVis.uint2str FNDA:22,SlugVis.uint2str -DA:161,22 -BRDA:161,5,0,- -DA:162,0 -DA:164,22 +DA:162,22 +BRDA:162,5,0,- +DA:163,0 DA:165,22 -DA:166,256 -DA:167,234 +DA:166,22 +DA:167,256 DA:168,234 -DA:170,22 +DA:169,234 DA:171,22 DA:172,22 -DA:173,256 -DA:174,234 +DA:173,22 +DA:174,256 DA:175,234 -DA:177,22 -DA:180,24 -FN:180,SlugVis.int2str +DA:176,234 +DA:178,22 +DA:181,24 +FN:181,SlugVis.int2str FNDA:24,SlugVis.int2str -DA:183,24 -BRDA:183,6,0,- -DA:184,0 -DA:186,24 +DA:184,24 +BRDA:184,6,0,- +DA:185,0 DA:187,24 DA:188,24 DA:189,24 -DA:190,120 -DA:191,96 +DA:190,24 +DA:191,120 DA:192,96 -DA:194,0 -BRDA:194,7,0,- +DA:193,96 DA:195,0 -DA:197,24 +BRDA:195,7,0,- +DA:196,0 DA:198,24 -DA:199,120 -DA:200,96 +DA:199,24 +DA:200,120 DA:201,96 -DA:203,0 -BRDA:203,8,0,- +DA:202,96 DA:204,0 -DA:206,24 +BRDA:204,8,0,- +DA:205,0 +DA:207,24 FNF:6 FNH:6 LF:82 @@ -2117,3 +2116,20 @@ LH:73 BRF:9 BRH:4 end_of_record +TN: +SF:test/unit/Airlock.t.sol +DA:63,1 +FN:63,AirlockCheat.setProtocolFees +FNDA:1,AirlockCheat.setProtocolFees +DA:64,1 +DA:67,2 +FN:67,AirlockCheat.setIntegratorFees +FNDA:2,AirlockCheat.setIntegratorFees +DA:68,2 +FNF:2 +FNH:2 +LF:4 +LH:4 +BRF:0 +BRH:0 +end_of_record diff --git a/test/unit/Airlock.t.sol b/test/unit/Airlock.t.sol index 5091ee4a..9be59279 100644 --- a/test/unit/Airlock.t.sol +++ b/test/unit/Airlock.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.24; -import { Test } from "forge-std/Test.sol"; +import { Test, stdError } from "forge-std/Test.sol"; import { Deployers } from "@v4-core-test/utils/Deployers.sol"; import { TickMath } from "@v4-core/libraries/TickMath.sol"; import { Ownable } from "@openzeppelin/access/Ownable.sol"; @@ -10,7 +10,16 @@ import { IHooks } from "@v4-core/interfaces/IHooks.sol"; import { Currency } from "@v4-core/types/Currency.sol"; import { V4Quoter } from "v4-periphery/src/lens/V4Quoter.sol"; import { PoolSwapTest } from "@v4-core/test/PoolSwapTest.sol"; -import { Airlock, ModuleState, WrongModuleState, SetModuleState, CreateParams } from "src/Airlock.sol"; +import { TestERC20 } from "@v4-core/test/TestERC20.sol"; +import { + Airlock, + ModuleState, + WrongModuleState, + SetModuleState, + CreateParams, + Collect, + ArrayLengthsMismatch +} from "src/Airlock.sol"; import { TokenFactory } from "src/TokenFactory.sol"; import { UniswapV4Initializer, DopplerDeployer } from "src/UniswapV4Initializer.sol"; import { GovernanceFactory } from "src/GovernanceFactory.sol"; @@ -45,8 +54,23 @@ int24 constant DEFAULT_TICK_SPACING = 8; uint256 constant DEFAULT_PD_SLUGS = 3; +/// @dev Test contract allowing us to set some specific state +contract AirlockCheat is Airlock { + constructor( + address owner_ + ) Airlock(owner_) { } + + function setProtocolFees(address token, uint256 amount) public { + protocolFees[token] = amount; + } + + function setIntegratorFees(address integrator, address token, uint256 amount) public { + integratorFees[integrator][token] = amount; + } +} + contract AirlockTest is Test, Deployers { - Airlock airlock; + AirlockCheat airlock; TokenFactory tokenFactory; UniswapV4Initializer uniswapV4Initializer; DopplerDeployer deployer; @@ -60,7 +84,7 @@ contract AirlockTest is Test, Deployers { deployFreshManager(); - airlock = new Airlock(address(this)); + airlock = new AirlockCheat(address(this)); tokenFactory = new TokenFactory(address(airlock)); deployer = new DopplerDeployer(manager); uniswapV4Initializer = new UniswapV4Initializer(address(airlock), manager, deployer); @@ -122,6 +146,17 @@ contract AirlockTest is Test, Deployers { airlock.setModuleState(modules, states); } + function test_setModuleState_RevertsWhenArrayLengthsMismatch() public { + address[] memory modules = new address[](1); + modules[0] = address(0xbeef); + ModuleState[] memory states = new ModuleState[](2); + states[0] = ModuleState.TokenFactory; + states[1] = ModuleState.PoolInitializer; + + vm.expectRevert(ArrayLengthsMismatch.selector); + airlock.setModuleState(modules, states); + } + function test_create_DeploysV4() public returns (address, address) { bytes memory tokenFactoryData = abi.encode(DEFAULT_TOKEN_NAME, DEFAULT_TOKEN_SYMBOL, 0, 0, new address[](0), new uint256[](0)); @@ -337,4 +372,40 @@ contract AirlockTest is Test, Deployers { ) ); } + + function test_collectProtocolFees_RevertsWhenCallerNotOwner() public { + vm.startPrank(address(0xb0b)); + vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, address(0xb0b))); + airlock.collectProtocolFees(address(0), address(0), 0); + } + + function test_collectProtocolFees_CollectsFees() public { + TestERC20 token = new TestERC20(1 ether); + token.transfer(address(airlock), 1 ether); + airlock.setProtocolFees(address(token), 1 ether); + vm.expectEmit(); + emit Collect(address(this), address(token), 1 ether); + airlock.collectProtocolFees(address(this), address(token), 1 ether); + assertEq(token.balanceOf(address(this)), 1 ether, "Owner balance is wrong"); + assertEq(token.balanceOf(address(airlock)), 0, "Airlock balance is wrong"); + } + + function test_collectIntegratorFees_CollectFees() public { + TestERC20 token = new TestERC20(1 ether); + token.transfer(address(airlock), 1 ether); + airlock.setIntegratorFees(address(this), address(token), 1 ether); + vm.expectEmit(); + emit Collect(address(this), address(token), 1 ether); + airlock.collectIntegratorFees(address(this), address(token), 1 ether); + assertEq(token.balanceOf(address(this)), 1 ether, "Integrator balance is wrong"); + assertEq(token.balanceOf(address(airlock)), 0, "Airlock balance is wrong"); + } + + function test_collectIntegratorFees_RevertsWhenAmountIsGreaterThanAvailableFees() public { + TestERC20 token = new TestERC20(1 ether); + token.transfer(address(airlock), 1 ether); + airlock.setIntegratorFees(address(this), address(token), 1 ether); + vm.expectRevert(stdError.arithmeticError); + airlock.collectIntegratorFees(address(this), address(token), 1 ether + 1); + } } diff --git a/test/unit/TokenFactory.t.sol b/test/unit/TokenFactory.t.sol index 9cb23ae7..478935fb 100644 --- a/test/unit/TokenFactory.t.sol +++ b/test/unit/TokenFactory.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.13; import { Test } from "forge-std/Test.sol"; -import { TokenFactory } from "src/TokenFactory.sol"; +import { TokenFactory, SenderNotAirlock } from "src/TokenFactory.sol"; contract TokenFactoryTest is Test { TokenFactory public factory; @@ -35,4 +35,27 @@ contract TokenFactoryTest is Test { abi.encode(name, symbol, yearlyMintCap, vestingDuration, recipients, amounts) ); } + + function test_create_RevertsWhenSenderNotAirlock() public { + uint256 initialSupply = 1e30; + address recipient = address(0xa71c3); + address owner = address(0xb0b); + bytes32 salt = hex"beef"; + string memory name = "Test Token"; + string memory symbol = "TT"; + uint256 yearlyMintCap = 1e25; + uint256 vestingDuration = 365 days; + address[] memory recipients = new address[](0); + uint256[] memory amounts = new uint256[](0); + + vm.startPrank(address(0xdead)); + vm.expectRevert(SenderNotAirlock.selector); + factory.create( + initialSupply, + recipient, + owner, + salt, + abi.encode(name, symbol, yearlyMintCap, vestingDuration, recipients, amounts) + ); + } } diff --git a/test/unit/UniswapV2Locker.t.sol b/test/unit/UniswapV2Locker.t.sol index 8bae4442..d2d16499 100644 --- a/test/unit/UniswapV2Locker.t.sol +++ b/test/unit/UniswapV2Locker.t.sol @@ -3,7 +3,13 @@ pragma solidity ^0.8.13; import { Test } from "forge-std/Test.sol"; import { TestERC20 } from "@v4-core/test/TestERC20.sol"; -import { UniswapV2Locker, PoolAlreadyInitialized, NoBalanceToLock, PoolNotInitialized } from "src/UniswapV2Locker.sol"; +import { + UniswapV2Locker, + PoolAlreadyInitialized, + NoBalanceToLock, + PoolNotInitialized, + SenderNotMigrator +} from "src/UniswapV2Locker.sol"; import { UNISWAP_V2_FACTORY_MAINNET, UNISWAP_V2_ROUTER_MAINNET } from "test/shared/Addresses.sol"; import { UniswapV2Migrator } from "src/UniswapV2Migrator.sol"; import { Airlock } from "src/Airlock.sol"; @@ -50,6 +56,12 @@ contract UniswapV2LockerTest is Test { assertEq(initialized, true); } + function test_receiveAndLock_RevertsWhenSenderNotMigrator() public { + vm.startPrank(address(0xdead)); + vm.expectRevert(SenderNotMigrator.selector); + locker.receiveAndLock(address(pool)); + } + function test_receiveAndLock_RevertsWhenPoolAlreadyInitialized() public { test_receiveAndLock_InitializesPool(); vm.startPrank(address(migrator)); diff --git a/test/unit/UniswapV2Migrator.t.sol b/test/unit/UniswapV2Migrator.t.sol index 47856361..6605d5f3 100644 --- a/test/unit/UniswapV2Migrator.t.sol +++ b/test/unit/UniswapV2Migrator.t.sol @@ -72,4 +72,25 @@ contract UniswapV2MigratorTest is Test { assertEq(liquidity - lockedLiquidity, IUniswapV2Pair(pool).balanceOf(address(0xbeef)), "Wrong liquidity"); assertEq(lockedLiquidity, IUniswapV2Pair(pool).balanceOf(address(migrator.locker())), "Wrong locked liquidity"); } + + function test_migrate_WrapsETH() public { + TestERC20 token1 = new TestERC20(1000 ether); + address pool = migrator.initialize(address(0), address(token1), new bytes(0)); + + deal(address(migrator), 100 ether); + token1.transfer(address(migrator), 100 ether); + + uint256 nativeBalanceBefore = address(migrator).balance; + migrator.migrate(uint160(2 ** 96), address(0), address(token1), address(0xbeef)); + assertEq(address(migrator).balance, 0, "Migrator ETH balance is wrong"); + assertEq(TestERC20(WETH_MAINNET).balanceOf(address(migrator)), 0, "Migrator WETH balance is wrong"); + assertEq(TestERC20(WETH_MAINNET).balanceOf(address(pool)), nativeBalanceBefore, "Pool WETH balance is wrong"); + } + + function _initialize() public returns (address pool, TestERC20 token0, TestERC20 token1) { + token0 = new TestERC20(1000 ether); + token1 = new TestERC20(1000 ether); + (token0, token1) = token0 < token1 ? (token0, token1) : (token1, token0); + pool = migrator.initialize(address(token0), address(token1), new bytes(0)); + } }